Fast forward选项是直接将master的指针指向要合并的分支的位置,合并之后,原始的分支中的所有信息都会被删除。我们可以选择其他的合并方式。先给出我们测试的代码段。
git branch -b dev
vim readme.txt
#修改readme文件中内容
git add readme.txt
git commit -m "add merge"
git checkout master
git merge --no-ff -m "merge with no-ff" dev
git branch -d dev
git branch -b dev
vim readme.txt
#修改readme.txt文件中的内容
git add readme.txt
git commit -m "Test2 in Branch dev"
git checkout master
git merge dev
之后输出修改日志如下:
ycwang@Y700:~/learngit$ git log --graph --pretty=oneline --abbrev-commit
* 0fe104a (HEAD -> master, dev) Test2 in Branch dev
* 10945d4 Branch test 2
* 5262c30 merge with no-ff
|\
| * 72f283e add merge
|/
* e1c955b conflict fixed
|\
| * d0e6106 AND simple
* | 6536364 & simple
|/
* 4c2b68d branch test
* 5d9ff40 (origin/master) append GPL
* 4c93eef wrote a readme file
可以看出第一次的分支合并,留下了分支出现的痕迹,第二次的分支合并则只留下了master分支的记录。其他分支中更新提交的信息Test2 in Branch dev
被放在了master分支中(Branch Test 2和当前测试无关,是一个其他的小测试,这里也被记录了)。这里的no-ff就是关闭Fast forward选项的分支合并。
另外,开发过程中,master通常是最终上线的版本,修改较少。通常更新的都是dev分支,每个开发人员在dev下创建自己的分支,然后当dev分支中的版本更新完成后,才会合并到master中。