git在合并分支时,一般都会加上 --no-ff 参数,像这样:
$ git checkout develop
$ git merge --no-ff feature
那这里的 --no-ff 参数具体作用是什么呢?
主要是为了禁止 git 的快进式合并。
git 在合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么在合并两者时,git 只会简单地把指针右移,这种操作就是“快进”(fast-forward),像这样:
A---B---C feature
/
D---E---F master
现在你要把 feature 分支合并到 master 分支,执行下面命令:
$ git checkout master
$ git merge feature
执行完命令后,结果就会变成:
A---B---C feature
/ master
D---E---F
因为 feature 分支就在 master 的下游,所以上述操作后就会直接移动 master 的指针,最终结果是 master 和 feature 都指向了 C。那我们来看看如果执行 git merge --no-ff feature 命令的话,将会是下面的结果:
A---B---C feature
/ \
D---E---F-----------G master
由于 --no-ff 命令禁止了快进式的合并,所以在 master 上会生成一个新的提交,此时 master 会指向 G。
其实从合并后的代码来看,结果是一样的,区别就在于 --no-ff 会让 git 生成一个新的提交对象。
所以你可能会问了,既然如此,为什么要这样?
因为通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 一般是我们的开发分支,上面会存许多零碎的提交,而快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。所以如果你根本不在意提交历史,也不爱管 master 干不干净,那么 --no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了 B,而不是想要的 F,因为 feature 的历史合并进了 master 分支里。
参考链接:
https://blog.csdn.net/zombres/article/details/82179122
9146

被折叠的 条评论
为什么被折叠?



