一、分支管理策略:
通常,合并分支时,如果可以那就使用快速合并(fast forward),但是有一些分支在合并的时候尽管不能产生分支冲突但是也不能使用快速合并。
这个时候会在合并之后做一次新的提交,但是该模式下,删除分支,会丢掉部分信息。
1.实例:不能使用快速合并同时也不会产生分支冲突的情况:
1.创建并且切换到新分支,名字叫dev
git chieckout -b dev
2.在dev下创建一个新的文件code2.cpp,并且提交一个新版本
subl code2.cpp
git add code2.cpp
git commit -m "提交dev中演示管理策略的文件"
3.切换回master分支,修改code.cpp,并且提交新的版本
git checkout master
subl code.cpp
git add code.cpp
git commit -m "提交master中演示管理策略的文件"
此时版本库中两条分支如下图,
由于提交的不是对同一个文件的修改,所以不会产生冲突,当然快速合并是不适用的。
通过上面的操作,此时master和dev分支的模型大概如上图:
2.接下来演示git merge dev后发生什么:
合并分支:
git merge dev
执行分支合并后,出现下面的页面:
因为不能使用快速合并,需要使用其他策略,并且会自动的为我们提交一个新版本,所以我们需要在光标处输入git自动提交新版本的说明,如下图:
然后ctrl + x离开即可。
退出上述页面后,实际上可以看到git使用的策略:recursive
king@ubuntu:~/mydir/test_git$ git merge dev
Merge made by the 'recursive' strategy.
code2.cpp | 1 +
1 file changed, 1 insertion(+)
create mode 100644 code2.cpp
3.本次合并会在主分支上提交创建一个新版本,这个提交是git自动帮我们做的,而版本说明就是上面页面输入的:
通过git log --pretty=oneline 查看提交的版本历史
1. master中演示策略 和 dev提交演示策略 是我们亲自创建提交的
2. 而最上面,合并的一种策略 是git在合并的时候自动创建并提交的新版本
版本说明信息实在输入git merge dev 命令后来的的页面框内输入的,上面有说到。
二、禁用快速合并模式:
有的时候,即使可以使用快速合并,但是希望禁止掉该怎么做:
实例:
1.创建并且切换到一个新的分支dev中
git checkout -b dev
2.修改文件并且做一次提交
git add code.cpp
git commit
3.切换回master分支
git checkout master
4.合并dev合并(正常情况会进行快速,我们这里见禁用快速合并)
git merge --no-ff -m "禁用快速合并"
(-m 同样是版本说明)
因为禁用快速合并后,git也会自动的创建并提交一个新版本。