提交记录
使用“git commit”命令,完成提交
创建分支
1.使用“git branch 分支名称”命令,完成分支的创建;
2.使用“git commit”命令,完成分支的提交
合并分支
merge
切换到主分支上,然后使用merge命令**拉取**分支到主分支上。
- 合并两个分支时会产生一个特殊的提交记录,它有两个父节点。 ```c 1.使用“git checkout 主线名称”命令,切换到主线分支上; 2.使用“git merge 分支名称”命令,完成“分支”合并到“主线”上
- 举例:
1.将bugFix分支合并到master:
git checkout master;
git merger bugFix;
2.将master合并到bugFix:
git checkout bugFix;
git merge master;
```
rebase
切换到需要合并的分支,然后使用rebase命令让该分支**跳到**主分支上。
- Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去;
- Rebase 的优势就是可以创造更线性的提交历史。 ```c 1.使用“git checkout 分支名称”命令,切换到分支上; 2.使用“git rebase 主线名称”命令,将分支rebase到主线分支前面; 3.使用“git checkout 主线名称”命令,切换到主线分支上; 4.使用“git rebase 分支名称”命令,将主线分支rebase到分支前面。
- 举例:
步骤1:将bugFix分支rebase到master:
git checkout bugFix;
git rebase master;
步骤2:将master分支rebase到bugFix:
git checkout master;
git rebase bugFix;
```
在提交树上移动
HEAD
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。 HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。分离HEAD
分离的 HEAD 就是让其指向了某个具体的提交记录(提交树的哈希值)而不是分支名。 ```c - 举例:
分离前的状态:
HEAD -> master -> C1
HEAD 指向 master, master 指向 C1
执行 git checkout C1命令;
HEAD完成分离:
变成了 HEAD -> C1
```
相对引用
通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用 。
相对引用有两种操作方式:
举例1(将分支名称作为相对引用的参照): master^相当于“master的父节点”; master^^相当于“master的第二个父节点”
举例2(将HEAD作为相对引用的参照): git checkout C3;//分离HEAD git checkout HEAD;//使用HEAD向上移动(第一次) git checkout HEAD^;//使用HEAD向上移动(第二次) git checkout HEAD^;//使用HEAD向上移动(第三次) ```
“~
”操作符 该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。 ```c
- 举例(一次移动4步):
git checkout HEAD~4
<a name="aC0uJ"></a>
### 强制修改分支位置
使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。
```c
举例:
git branch -f master HEAD~3
上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
相对引用为我们提供了一种简洁的引用提交记录 C1 的方式, 而 -f 则容许我们将分支强制移动到那个位置。
撤销变更
和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。
我们这个应用主要关注的是后者。
主要有两种方法用来撤销变更
- git reset
- git revert
Git Reset
git reset 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
在reset后, C2 所做的变更还在,但是处于未加入暂存区状态。举例:
git reset HEAD~1
Git Revert
在本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的。
为了撤销更改并分享给别人,我们需要使用 git revert。举例:
git revert HEAD
git revert撤销的提交记录后面会多出一个新提交!
这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。
也就是说 C2' 的状态与 C1 是相同的。
整理提交记录