git merge 和 git merge --no-ff的区别

The diffrence between git merge and git merge --no-ff

Posted by alovn on May 8, 2019

GItFlow工作流的文章里面,都会推荐在合并分支的时候加上–no-ff参数。 这里我将介绍一下merge的三种状态及 git merge 和 git merge –no-ff 的区别

–ff (fast-forward)

–ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。

Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward)不过这种情况如果删除分支,则会丢失merge分支信息。

–squash

把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。

–no-ff

关闭fast-forward模式,在提交的时候,会创建一个merge的commit信息,然后合并的和master分支。

我们平常什么都不加的时候,则使用默认的 –ff , 即 fast-forward 方式。

img

依据这张图片能够看出:

git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史。以及branch 状态。

git merge 则不会显示 feature,仅仅保留单条分支记录。