fix: 移除标题伪元素#前缀并修正目录层级
- 删除 custom.css 中给 h1/h2/h3 强加 # 前缀的 ::before 规则 - 将 X.Y 子节标题由 ## 提升为 ###,使 TOC 正确嵌套 - 新增 tools/fix-headings.js 用于批量调整标题层级
This commit is contained in:
+52
-48
@@ -1,4 +1,14 @@
|
|||||||
## 01、认识一下Git!—简介
|
---
|
||||||
|
title: Git使用教学
|
||||||
|
date: 2026-07-08 10:00:00
|
||||||
|
tags: [编程, 教学]
|
||||||
|
categories: 教学
|
||||||
|
cover: /img/cover.jpg
|
||||||
|
top_img: /img/top.jpg
|
||||||
|
description: 认识一下Git!
|
||||||
|
---
|
||||||
|
|
||||||
|
## 认识一下Git!—简介
|
||||||
|
|
||||||
Git是当前最先进、最主流的**分布式**版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基础,所以Git也就成了程序员的必备技能。
|
Git是当前最先进、最主流的**分布式**版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基础,所以Git也就成了程序员的必备技能。
|
||||||
|
|
||||||
@@ -12,11 +22,11 @@ Git是Linux之父被迫开发的,为了解决Linux混乱的代码管理而开
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 02、Git是干什么的?—基础概念
|
## Git是干什么的?—基础概念
|
||||||
|
|
||||||
先了解下Git的基本概念,及基本框架、工作流程。
|
先了解下Git的基本概念,及基本框架、工作流程。
|
||||||
|
|
||||||
## 2.1、Git概念汇总🔥
|
### Git概念汇总🔥
|
||||||
|
|
||||||
| **概念名称** | **描述** |
|
| **概念名称** | **描述** |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
@@ -38,7 +48,7 @@ Git是Linux之父被迫开发的,为了解决Linux混乱的代码管理而开
|
|||||||
| **origin/master** | 表示远程仓库(`origin`)的“`master`”分支 |
|
| **origin/master** | 表示远程仓库(`origin`)的“`master`”分支 |
|
||||||
| **origin/HEAD** | 表示远程仓库(`origin`)的最新提交的位置,一般情况等于“`origin/master`” |
|
| **origin/HEAD** | 表示远程仓库(`origin`)的最新提交的位置,一般情况等于“`origin/master`” |
|
||||||
|
|
||||||
## 2.2、工作区/暂存区/仓库
|
### 工作区/暂存区/仓库
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -56,13 +66,13 @@ Git是Linux之父被迫开发的,为了解决Linux混乱的代码管理而开
|
|||||||
|
|
||||||
如上图,为对应本地仓库目录的结构关系。
|
如上图,为对应本地仓库目录的结构关系。
|
||||||
|
|
||||||
## 2.3、Git基本流程(图)
|
### Git基本流程(图)
|
||||||
|
|
||||||
Git的工作流程核心就下面几个步骤,掌握了就可以开始写Bug了。
|
Git的工作流程核心就下面几个步骤,掌握了就可以开始写Bug了。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 2.4、Git状态(图)
|
### Git状态(图)
|
||||||
|
|
||||||
Git在执行提交的时候,不是直接将工作区的修改保存到仓库,而是将暂存区域的修改保存到仓库。要提交文件,首先需要把文件加入到暂存区域中。因此,Git管理的文件有三(+2)种状态:
|
Git在执行提交的时候,不是直接将工作区的修改保存到仓库,而是将暂存区域的修改保存到仓库。要提交文件,首先需要把文件加入到暂存区域中。因此,Git管理的文件有三(+2)种状态:
|
||||||
|
|
||||||
@@ -70,7 +80,7 @@ Git在执行提交的时候,不是直接将工作区的修改保存到仓库
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 03、起步:Git安装配置
|
## 起步:Git安装配置
|
||||||
|
|
||||||
Git官网:[www.git-scm.com/](https://www.git-scm.com/ "https://www.git-scm.com/") 下载安装包进行安装。Git的使用有两种方式:
|
Git官网:[www.git-scm.com/](https://www.git-scm.com/ "https://www.git-scm.com/") 下载安装包进行安装。Git的使用有两种方式:
|
||||||
|
|
||||||
@@ -83,7 +93,7 @@ git version 2.33.0.windows.2
|
|||||||
|
|
||||||
> 📢 本文是在Windows 平台上完成的,不过这个对学习Git没什么影响。
|
> 📢 本文是在Windows 平台上完成的,不过这个对学习Git没什么影响。
|
||||||
|
|
||||||
## 3.1、Git的配置文件
|
### Git的配置文件
|
||||||
|
|
||||||
Git有三个主要的配置文件:三个配置文件的优先级是**① < ② < ③**
|
Git有三个主要的配置文件:三个配置文件的优先级是**① < ② < ③**
|
||||||
|
|
||||||
@@ -123,7 +133,7 @@ user.name=Kanding
|
|||||||
user.email=123anding@163.com
|
user.email=123anding@163.com
|
||||||
```
|
```
|
||||||
|
|
||||||
## 3.2、配置-初始化用户
|
### 3.2、配置-初始化用户
|
||||||
|
|
||||||
当安装Git后首先要做的事情是配置你的用户信息—— 告诉Git你是谁?配置 **用户名**、**邮箱地址**,每次提交文件时都会带上这个用户信息,查看历史记录时就知道是谁干的了。
|
当安装Git后首先要做的事情是配置你的用户信息—— 告诉Git你是谁?配置 **用户名**、**邮箱地址**,每次提交文件时都会带上这个用户信息,查看历史记录时就知道是谁干的了。
|
||||||
|
|
||||||
@@ -139,7 +149,7 @@ $ cat 'C:\Users\Kwongad\.gitconfig'
|
|||||||
email = 123anding@163.com
|
email = 123anding@163.com
|
||||||
```
|
```
|
||||||
|
|
||||||
## 3.3、配置-忽略.gitignore
|
### 配置-忽略.gitignore
|
||||||
|
|
||||||
工作目录中的文件并不是全都需要纳入版本管理,如日志、临时文件、私有配置文件等不需要也不能纳入版本管理,那该怎么办呢?
|
工作目录中的文件并不是全都需要纳入版本管理,如日志、临时文件、私有配置文件等不需要也不能纳入版本管理,那该怎么办呢?
|
||||||
|
|
||||||
@@ -160,13 +170,13 @@ doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 04、Git的GUI工具们
|
## Git的GUI工具们
|
||||||
|
|
||||||
如果不想用命令行工具,完全可以安装一个Git的GUI工具,用的更简单、更舒服。不用记那么多命令了,极易上手,不过Git基础还是需要学习了解一下的。
|
如果不想用命令行工具,完全可以安装一个Git的GUI工具,用的更简单、更舒服。不用记那么多命令了,极易上手,不过Git基础还是需要学习了解一下的。
|
||||||
|
|
||||||
> ❓对于Git,建议用命令行,这样你才能真的理解Git的思想? ✔️其实都只是工具而已,适合自己的就是最好的,没必要纠结,多写点Bug更重要!
|
> ❓对于Git,建议用命令行,这样你才能真的理解Git的思想? ✔️其实都只是工具而已,适合自己的就是最好的,没必要纠结,多写点Bug更重要!
|
||||||
|
|
||||||
## 4.1、SourceTree
|
### SourceTree
|
||||||
|
|
||||||
SourceTree的[官网](https://www.sourcetreeapp.com/ "https://www.sourcetreeapp.com/") 下载安装包,支持Window、Mac系统,按照提示完成安装。
|
SourceTree的[官网](https://www.sourcetreeapp.com/ "https://www.sourcetreeapp.com/") 下载安装包,支持Window、Mac系统,按照提示完成安装。
|
||||||
|
|
||||||
@@ -174,7 +184,7 @@ SourceTree的[官网](https://www.sourcetreeapp.com/ "https://www.sourcetreeapp.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 4.2、TortoiseGit
|
### TortoiseGit
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -186,7 +196,7 @@ SourceTree的[官网](https://www.sourcetreeapp.com/ "https://www.sourcetreeapp.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 4.3、VSCode中的Git
|
### VSCode中的Git
|
||||||
|
|
||||||
VSCode自带的Git工具基本已经可以满足日常使用了,既有可视化功能,也能敲命令,习惯了不就不用安装其他GUI工具了。不过还是可以再安装一些VSCode插件,来增强Git功能。
|
VSCode自带的Git工具基本已经可以满足日常使用了,既有可视化功能,也能敲命令,习惯了不就不用安装其他GUI工具了。不过还是可以再安装一些VSCode插件,来增强Git功能。
|
||||||
|
|
||||||
@@ -194,9 +204,9 @@ VSCode自带的Git工具基本已经可以满足日常使用了,既有可视
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 05、Git使用入门
|
## Git使用入门
|
||||||
|
|
||||||
## 5.1、创建仓库
|
### 创建仓库
|
||||||
|
|
||||||
创建本地仓库的方法有两种:
|
创建本地仓库的方法有两种:
|
||||||
|
|
||||||
@@ -238,7 +248,7 @@ Resolving deltas: 100% (48/48), done.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 5.2、暂存区add
|
### 暂存区add
|
||||||
|
|
||||||
可以简单理解为,`git add`命令就是把要提交的所有修改放到暂存区(Stage),然后,执行`git commit`就可以一次性把暂存区的所有修改提交到仓库。
|
可以简单理解为,`git add`命令就是把要提交的所有修改放到暂存区(Stage),然后,执行`git commit`就可以一次性把暂存区的所有修改提交到仓库。
|
||||||
|
|
||||||
@@ -271,7 +281,7 @@ $ git mv [file-original] [file-renamed]
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 5.3、提交commit-记录
|
### 提交commit-记录
|
||||||
|
|
||||||
`git commit`提交是以时间顺序排列被保存到数据库中的,就如游戏关卡一样,每一次提交(commit)就会产生一条记录:`id + 描述 + 快照内容`。
|
`git commit`提交是以时间顺序排列被保存到数据库中的,就如游戏关卡一样,每一次提交(commit)就会产生一条记录:`id + 描述 + 快照内容`。
|
||||||
|
|
||||||
@@ -333,7 +343,7 @@ $ git log -n2 --oneline
|
|||||||
228362e Merge branch 'main' of github.com:kwonganding/KWebNote
|
228362e Merge branch 'main' of github.com:kwonganding/KWebNote
|
||||||
```
|
```
|
||||||
|
|
||||||
## 5.4、Git的“指针”引用们
|
### Git的“指针”引用们
|
||||||
|
|
||||||
Git中最重要的就是提交记录了,其他如**标签**、**分支**、**HEAD** 都对提交记录的“指针”引用,指向这些提交记录,理解这一点很重要。
|
Git中最重要的就是提交记录了,其他如**标签**、**分支**、**HEAD** 都对提交记录的“指针”引用,指向这些提交记录,理解这一点很重要。
|
||||||
|
|
||||||
@@ -368,7 +378,7 @@ ref: refs/heads/dev
|
|||||||
|
|
||||||
> **📢“指针”引用**:之所以用引号的“指针”,是为了便于统一和理解。和指针原理类似,都是一个指向,只是实际上可能更复杂一点,且不同的“指针”引用会有区别。
|
> **📢“指针”引用**:之所以用引号的“指针”,是为了便于统一和理解。和指针原理类似,都是一个指向,只是实际上可能更复杂一点,且不同的“指针”引用会有区别。
|
||||||
|
|
||||||
## 5.5、提交的唯一标识id,HEAD~n是什么意思?
|
### 提交的唯一标识id,HEAD~n是什么意思?
|
||||||
|
|
||||||
每一个提交都有一个唯一标识,主要就是提交的`hash`值`commit id`,在很多指令中会用到,如版本回退、拣选提交等,需要指定一个提交。那标识唯一提交有两种方式:
|
每一个提交都有一个唯一标识,主要就是提交的`hash`值`commit id`,在很多指令中会用到,如版本回退、拣选提交等,需要指定一个提交。那标识唯一提交有两种方式:
|
||||||
|
|
||||||
@@ -388,7 +398,7 @@ d3e15f9 HEAD@{6}: reset: moving to d3e15f9
|
|||||||
d3e15f9 HEAD@{9}: reset: moving to HEAD~
|
d3e15f9 HEAD@{9}: reset: moving to HEAD~
|
||||||
```
|
```
|
||||||
|
|
||||||
## 5.6、比较diff
|
### 比较diff
|
||||||
|
|
||||||
`git diff`用来比较不同文件版本之间的差异。
|
`git diff`用来比较不同文件版本之间的差异。
|
||||||
|
|
||||||
@@ -421,7 +431,7 @@ $ git diff --shortstat "@{0 day ago}"
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 06、远程仓库
|
## 远程仓库
|
||||||
|
|
||||||
Git作为分布式的版本管理系统,每个终端都有自己的Git仓库。但团队协作还需一个中间仓库,作为中心,同步各个仓库。于是服务端(远程)仓库就来承担这个职责,服务端不仅有仓库,还配套相关管理功能。
|
Git作为分布式的版本管理系统,每个终端都有自己的Git仓库。但团队协作还需一个中间仓库,作为中心,同步各个仓库。于是服务端(远程)仓库就来承担这个职责,服务端不仅有仓库,还配套相关管理功能。
|
||||||
|
|
||||||
@@ -429,7 +439,7 @@ Git作为分布式的版本管理系统,每个终端都有自己的Git仓库
|
|||||||
|
|
||||||
可以用公共的Git服务器,也可以自己搭建一套Git服务器。
|
可以用公共的Git服务器,也可以自己搭建一套Git服务器。
|
||||||
|
|
||||||
## 6.1、远程用户登录
|
### 远程用户登录
|
||||||
|
|
||||||
Git服务器一般提供两种登录验证方式:
|
Git服务器一般提供两种登录验证方式:
|
||||||
|
|
||||||
@@ -504,7 +514,7 @@ $ ssh -T git@github.com
|
|||||||
Hi kwonganding! You've successfully authenticated, but GitHub does not provide shell access.
|
Hi kwonganding! You've successfully authenticated, but GitHub does not provide shell access.
|
||||||
```
|
```
|
||||||
|
|
||||||
## 6.2、远程仓库指令🔥
|
### 远程仓库指令🔥
|
||||||
|
|
||||||
| **指令** | **描述** |
|
| **指令** | **描述** |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
@@ -524,7 +534,7 @@ Hi kwonganding! You've successfully authenticated, but GitHub does not provide s
|
|||||||
| git remote rm \[remote-name\] | 删除远程仓库 |
|
| git remote rm \[remote-name\] | 删除远程仓库 |
|
||||||
| git pull --rebase | 使用rebase的模式进行合并 |
|
| git pull --rebase | 使用rebase的模式进行合并 |
|
||||||
|
|
||||||
## 6.3、推送push/拉取pull
|
### 推送push/拉取pull
|
||||||
|
|
||||||
`git push`、`git pull`是团队协作中最常用的指令,用于同步本地、服务端的更新,与他人协作。
|
`git push`、`git pull`是团队协作中最常用的指令,用于同步本地、服务端的更新,与他人协作。
|
||||||
|
|
||||||
@@ -534,7 +544,7 @@ Hi kwonganding! You've successfully authenticated, but GitHub does not provide s
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 6.4、fetch与pull有什么不同?
|
### fetch与pull有什么不同?
|
||||||
|
|
||||||
两者都是从服务端获取更新,主要区别是`fetch`不会自动合并,不会影响当前工作区内容。
|
两者都是从服务端获取更新,主要区别是`fetch`不会自动合并,不会影响当前工作区内容。
|
||||||
|
|
||||||
@@ -563,13 +573,13 @@ Fast-forward
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 07、Git利器-分支
|
## Git利器-分支
|
||||||
|
|
||||||
分支是从主线分离出去的“副本”,分支就像是平行宇宙,可独立发展,独立编辑、提交,也可以和其他分支合并。分支是Git的核心必杀利器之一,分支创建、切换、删除都非常快,他非常的轻量。所以,早建分支!多用分支!
|
分支是从主线分离出去的“副本”,分支就像是平行宇宙,可独立发展,独立编辑、提交,也可以和其他分支合并。分支是Git的核心必杀利器之一,分支创建、切换、删除都非常快,他非常的轻量。所以,早建分支!多用分支!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 7.1、分支Branch
|
### 分支Branch
|
||||||
|
|
||||||
比如有一个项目团队,准备10月份发布新版本,要新开发一堆黑科技功能,占领市场。你和小伙伴“小美”一起负责开发一个新功能A,开发周期2周,在这两周你们的代码不能影响其他人,不影响主分支。这个时候就可以为这个新功能创建一个分支,你们两在这个分支上干活,2周后代码开发完了、测试通过,就可以合并进要发版的开发分支了。安全、高效,不影响其他人工作,完美!
|
比如有一个项目团队,准备10月份发布新版本,要新开发一堆黑科技功能,占领市场。你和小伙伴“小美”一起负责开发一个新功能A,开发周期2周,在这两周你们的代码不能影响其他人,不影响主分支。这个时候就可以为这个新功能创建一个分支,你们两在这个分支上干活,2周后代码开发完了、测试通过,就可以合并进要发版的开发分支了。安全、高效,不影响其他人工作,完美!
|
||||||
|
|
||||||
@@ -585,7 +595,7 @@ $ cat .git/refs/heads/dev
|
|||||||
ca88989e7c286fb4ba56785c2cd8727ea1a07b97
|
ca88989e7c286fb4ba56785c2cd8727ea1a07b97
|
||||||
```
|
```
|
||||||
|
|
||||||
## 7.2、分支指令🔥
|
### 分支指令🔥
|
||||||
|
|
||||||
| **指令** | **描述** |
|
| **指令** | **描述** |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
@@ -621,7 +631,7 @@ $ git branch
|
|||||||
# 列出了当前的所有分支,星号“*”开头的“main”为当前活动分支。
|
# 列出了当前的所有分支,星号“*”开头的“main”为当前活动分支。
|
||||||
```
|
```
|
||||||
|
|
||||||
## 7.3、分支的切换checkout
|
### 分支的切换checkout
|
||||||
|
|
||||||
代码仓库可以有多个分支,`master`为默认的主分支,但只有一个分支在工作状态。所以要操作不同分支,需要切换到该分支,`HEAD`就是指向当前正在活动的分支。
|
代码仓库可以有多个分支,`master`为默认的主分支,但只有一个分支在工作状态。所以要操作不同分支,需要切换到该分支,`HEAD`就是指向当前正在活动的分支。
|
||||||
|
|
||||||
@@ -642,7 +652,7 @@ ref: refs/heads/dev
|
|||||||
|
|
||||||
**❓切换时还没提交的代码怎么办?**
|
**❓切换时还没提交的代码怎么办?**
|
||||||
|
|
||||||
## 7.4、合并merge&冲突
|
### 合并merge&冲突
|
||||||
|
|
||||||
把两个分支的修改内容合并到一起,常用的合并指令`git merge [branch]`,将分支`[branch]`合并到当前分支。根据要合并的内容的不同,具体合并过程就会有多种情况。
|
把两个分支的修改内容合并到一起,常用的合并指令`git merge [branch]`,将分支`[branch]`合并到当前分支。根据要合并的内容的不同,具体合并过程就会有多种情况。
|
||||||
|
|
||||||
@@ -670,7 +680,7 @@ ref: refs/heads/dev
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 7.5、变基rebase
|
### 变基rebase
|
||||||
|
|
||||||
把两个分支的修改内容合并到一起的办法有两种:`merge` 和 `rebase`,作用都是一样的,区别是`rebase`的提交历史更简洁,干掉了分叉,merge的提交历史更完整。
|
把两个分支的修改内容合并到一起的办法有两种:`merge` 和 `rebase`,作用都是一样的,区别是`rebase`的提交历史更简洁,干掉了分叉,merge的提交历史更完整。
|
||||||
|
|
||||||
@@ -684,7 +694,7 @@ $ git merge dev
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 08、标签管理
|
## 标签管理
|
||||||
|
|
||||||
**标签**(Tags)指的是某个分支某个特定时间点的状态,是对某一个提交记录的的**固定**“指针”引用。一经创建,不可移动,存储在工作区根目录下`.git\refs\tags`。可以理解为某一次提交(编号)的别名,常用来标记版本。所以发布时,一般都会打一个版本标签,作为该版本的快照,指向对应提交`commit`。
|
**标签**(Tags)指的是某个分支某个特定时间点的状态,是对某一个提交记录的的**固定**“指针”引用。一经创建,不可移动,存储在工作区根目录下`.git\refs\tags`。可以理解为某一次提交(编号)的别名,常用来标记版本。所以发布时,一般都会打一个版本标签,作为该版本的快照,指向对应提交`commit`。
|
||||||
|
|
||||||
@@ -724,13 +734,13 @@ v1
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 09、后悔药-怎么撤销变更?
|
## 后悔药-怎么撤销变更?
|
||||||
|
|
||||||
发现写错了要回退怎么办?看看下面几种后悔指令吧!
|
发现写错了要回退怎么办?看看下面几种后悔指令吧!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 9.1、后悔指令🔥
|
### 后悔指令🔥
|
||||||
|
|
||||||
| **指令** | **描述** |
|
| **指令** | **描述** |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
@@ -759,7 +769,7 @@ $ git checkout HEAD .
|
|||||||
Updated 1 path from f951a96
|
Updated 1 path from f951a96
|
||||||
```
|
```
|
||||||
|
|
||||||
## 9.2、回退版本reset
|
### 回退版本reset
|
||||||
|
|
||||||
`reset`是专门用来撤销修改、回退版本的指令,支持的场景比较多,多种撤销姿势,所以参数组合也比较多。简单理解就是移动`master`分支、`HEAD`的“指针”地址,理解这一点就基本掌握`reset`了。
|
`reset`是专门用来撤销修改、回退版本的指令,支持的场景比较多,多种撤销姿势,所以参数组合也比较多。简单理解就是移动`master`分支、`HEAD`的“指针”地址,理解这一点就基本掌握`reset`了。
|
||||||
|
|
||||||
@@ -804,7 +814,7 @@ ccb9937 (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: 报表新增
|
|||||||
4b1028c HEAD@{3}: commit: 财务报表模块开发完成
|
4b1028c HEAD@{3}: commit: 财务报表模块开发完成
|
||||||
```
|
```
|
||||||
|
|
||||||
## 9.3、撤销提交revert
|
### 撤销提交revert
|
||||||
|
|
||||||
安全的撤销某一个提交记录,基本原理就是生产一个新的提交,用原提交的逆向操作来完成撤销操作。注意,这不同于`reset`,`reset`是回退版本,revert只是用于撤销某一次历史提交,操作是比较安全的。
|
安全的撤销某一个提交记录,基本原理就是生产一个新的提交,用原提交的逆向操作来完成撤销操作。注意,这不同于`reset`,`reset`是回退版本,revert只是用于撤销某一次历史提交,操作是比较安全的。
|
||||||
|
|
||||||
@@ -819,7 +829,7 @@ $ git revert 41ea42 -m'撤销对***的修改'
|
|||||||
1 file changed, 1 deletion(-)
|
1 file changed, 1 deletion(-)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 9.4、checkout/reset/revert总结
|
### checkout/reset/revert总结
|
||||||
|
|
||||||
| **标题 \\ 指令** | **checkout** | **reset** | **revert** |
|
| **标题 \\ 指令** | **checkout** | **reset** | **revert** |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
@@ -833,9 +843,9 @@ $ git revert 41ea42 -m'撤销对***的修改'
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 10、工作中的Git实践
|
## 工作中的Git实践
|
||||||
|
|
||||||
## 10.1、Git flow
|
### Git flow
|
||||||
|
|
||||||
Git flow(Git工作流程)是指软件项目中的一种Git分支管理模型,经过了大量的实践和优化,被认为是现代敏捷软件开发和DevOps(开发、技术运营和质量保障三者的交集)的最佳实践。Git flow主要流程及关键分支:[原图地址-processon](https://www.processon.com/view/59ec836de4b0c86d400e99f1?fromnew=1 "https://www.processon.com/view/59ec836de4b0c86d400e99f1?fromnew=1")
|
Git flow(Git工作流程)是指软件项目中的一种Git分支管理模型,经过了大量的实践和优化,被认为是现代敏捷软件开发和DevOps(开发、技术运营和质量保障三者的交集)的最佳实践。Git flow主要流程及关键分支:[原图地址-processon](https://www.processon.com/view/59ec836de4b0c86d400e99f1?fromnew=1 "https://www.processon.com/view/59ec836de4b0c86d400e99f1?fromnew=1")
|
||||||
|
|
||||||
@@ -855,7 +865,7 @@ Git flow(Git工作流程)是指软件项目中的一种Git分支管理模型
|
|||||||
|
|
||||||
**✅其他开发分支:dev-xxx**,开发人员可以针对模块自己创建本地分支,开发完成后合并到dev开发分支,然后删除本地分支。
|
**✅其他开发分支:dev-xxx**,开发人员可以针对模块自己创建本地分支,开发完成后合并到dev开发分支,然后删除本地分支。
|
||||||
|
|
||||||
## 10.2、金屋藏娇stash
|
### 10.2、金屋藏娇stash
|
||||||
|
|
||||||
当你正在`dev`分支开发一个功能时,代码写了一半,突然有一个线上的bug急需要马上修改。`dev`分支Bug没写完,不方便提交,就不能切换到主分支去修复线上bug。Git提供一个`stash`功能,可以把当前**工作区、暂存区** 未提交的内容“隐藏”起来,就像什么都没发生一样。
|
当你正在`dev`分支开发一个功能时,代码写了一半,突然有一个线上的bug急需要马上修改。`dev`分支Bug没写完,不方便提交,就不能切换到主分支去修复线上bug。Git提供一个`stash`功能,可以把当前**工作区、暂存区** 未提交的内容“隐藏”起来,就像什么都没发生一样。
|
||||||
|
|
||||||
@@ -897,7 +907,7 @@ $ git stash pop
|
|||||||
|
|
||||||
> 🪧当然这里先提交到本地也是可以的,只是提交不是一个完整的功能代码,而是残缺的一部分,影响也不大。
|
> 🪧当然这里先提交到本地也是可以的,只是提交不是一个完整的功能代码,而是残缺的一部分,影响也不大。
|
||||||
|
|
||||||
## 拣选提交cherry-pick
|
### 拣选提交cherry-pick
|
||||||
|
|
||||||
当有一个紧急bug,在`dev`上修复完,我们需要把`dev`上的这个bug修复所做的修改“复制”到`master`分支,但不想把整个dev合并过去。为了方便操作,Git专门提供了一个`cherry-pick`命令,让我们能复制一个特定的提交到当前分支,而不管这个提交在哪个分支。
|
当有一个紧急bug,在`dev`上修复完,我们需要把`dev`上的这个bug修复所做的修改“复制”到`master`分支,但不想把整个dev合并过去。为了方便操作,Git专门提供了一个`cherry-pick`命令,让我们能复制一个特定的提交到当前分支,而不管这个提交在哪个分支。
|
||||||
|
|
||||||
@@ -911,9 +921,3 @@ $ git cherry-pick [commit]
|
|||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 参考资料
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> **©️版权申明**:版权所有@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处
|
|
||||||
|
|||||||
@@ -92,10 +92,6 @@ html[data-theme="dark"] #article-container table:not(.gist table) tbody tr:nth-c
|
|||||||
padding-bottom: 0.3rem;
|
padding-bottom: 0.3rem;
|
||||||
border-bottom: 2px solid var(--border-color);
|
border-bottom: 2px solid var(--border-color);
|
||||||
}
|
}
|
||||||
#article-container h1::before, #article-container h2::before, #article-container h3::before {
|
|
||||||
content: "# ";
|
|
||||||
color: var(--btn-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ==================== 文章标题栏字体颜色(明亮模式) ==================== */
|
/* ==================== 文章标题栏字体颜色(明亮模式) ==================== */
|
||||||
html:not([data-theme="dark"]) #post-info .post-title {
|
html:not([data-theme="dark"]) #post-info .post-title {
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// 将文章中的子节标题(X.Y 形式、拣选提交)从 ## 提升为 ###,使目录正确嵌套
|
||||||
|
const fs = require('fs');
|
||||||
|
const p = 'c:/Users/Administrator/Desktop/新建文件夹/blog/source/_posts/Git使用教学.md';
|
||||||
|
let s = fs.readFileSync(p, 'utf8');
|
||||||
|
|
||||||
|
const n1 = (s.match(/^## \d+\.\d+、/gm) || []).length;
|
||||||
|
s = s.replace(/^## (\d+\.\d+、)/gm, '### $1');
|
||||||
|
|
||||||
|
const n2 = (s.match(/^## 拣选提交/gm) || []).length;
|
||||||
|
s = s.replace(/^## (拣选提交)/gm, '### $1');
|
||||||
|
|
||||||
|
fs.writeFileSync(p, s);
|
||||||
|
console.log('提升 X.Y 子节: ' + n1 + ' 处');
|
||||||
|
console.log('提升 拣选提交: ' + n2 + ' 处');
|
||||||
Reference in New Issue
Block a user