Fast forward(快进模式)
表示快进模式合并,即直接将当前分支指针指向要合并的分支
情景:master先提交两个commit后,checkout在master的基础上生成dev1.0【此时master和dev1.0指针都指向同一个commit】dev1.0再提交两个commit,开发出了登录功能;master将dev1.0的登录功能,进行merge时,会使用fast-forward模式进行合并;
# master添加第一个commit
master$ echo "a" > a.txt
master$ git add .
master$ git commit -m "master提交了a.txt"
# master添加第二个commit
master$ echo "b" > b.txt
master$ git add .
master$ git commit -m "master添加了b.txt"
gitk --all
查看
![](https://img.haomeiwen.com/i17467252/d77719ebbb127463.png)
# 从master分支checkout生成 dev1.0
master$ git checkout -b dev1.0
# dev1.0添加第一个commit
dev1.0$ echo "c" > c.txt
dev1.0$ git add .
dev1.0$ git commit -m "dev1.0提交了c.txt"
# dev1.0添加第二个commit
dev1.0$ echo "d" > d.txt
dev1.0$ git add .
dev1.0$ git commit -m "dev1.0提交了d.txt"
gitk --all
查看
![](https://img.haomeiwen.com/i17467252/f1158087725390ef.png)
说明:此时 dev1.0是master的上游。4个commit是线性的。此时切换到master合并dev1.0,master分支会进行快速合并模式(fast-forward),直接将master的HEAD指向dev1.0的HEAD;
dev1.0$ git checkout master
master$ git merge dev1.0
Updating fe41a69..f0bc6e7
Fast-forward
c.txt | 1 +
d.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 c.txt
create mode 100644 d.txt
![](https://img.haomeiwen.com/i17467252/ce89e23977c4bafc.png)
使用fast forward的缺点:
一旦删除分支或者分支指针往前走,很难体现该处提交是合并自某个分支的。
即:一旦dev1.0删除或者新提交commit,master的第三、四个commit很难知道是通过合并dev1.0的
# 此处演示dev1.0新提交了新的commit
master$git checkout dev1.0
dev1.0$echo "e" > e.txt
dev1.0$git add .
dev1.0$git commit -m "dev1.0添加了e.txt"
![](https://img.haomeiwen.com/i17467252/3f029b83424e5ea9.png)
说明:当dev1.0提交了 “dev1.0添加了e.txt”后,从上图看,我们很难知道master的第三、四commit来自合并dev1.0得来的。
no-ff(非快进模式)
如果禁用掉Fast-forward
(快进模式),就可以生成新的commit,从而避免了“一旦dev1.0删除或者新提交commit,master的第三、四个commit很难知道是通过合并dev1.0的”:
git merge --no-ff -m "commit描述" 要合并的分支名
![](https://img.haomeiwen.com/i17467252/fb04d570fc1c4bdf.png)
所以,使用no-ff进行merge。当dev1.0进行新提交commit,我们依旧可以知道master有跟dev1.0进行merge产生了一个commit;
详细见下面:
![](https://img.haomeiwen.com/i17467252/4a2f1241e235680c.png)
![](https://img.haomeiwen.com/i17467252/d039aa5e16657766.png)
删除dev1.0依旧能看到master的commit(黄色HEAD)是通过merge得到的。
![](https://img.haomeiwen.com/i17467252/95cec3c2e2e31183.png)
网友评论