git merge 参数--ff、--no-ff 和--squash 区别

6,490 阅读1分钟

--ff: (fast-forward)默认的提交方式。方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit。

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

从提交记录上来看3个参数的区别:

从上图可以得到结论:

--ff:默认方式。保留分支的提交记录,但不会生成合并的提交记录。 --no-ff:不使用fast-forward方式合并,保留分支的commit历史,并生成一次合并的提交记录 --squash:使用squash方式合并,把多次分支commit历史压缩为一次。然后在合并时所在的分支主动做commit,产生一次合并记录