记住
merge是主动merge的,所以可以存在没有commit啊!
取消
git merge --abort
分类
--ff
参数和--no-ff
参数
--ff
指的是fast-forward方式,
--no-ff
指的是强行关闭fast-forward方式。
fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
git merge --squash
是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash
进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。--no-ff
:不使用fast-forward方式合并,保留分支的commit历史--squash
:使用squash方式合并,把多次分支commit历史压缩为一次
过程
这个时候生成了一个新的commit
号,这种提交就不是fast-forward
(这个时候也无法生成fast-forward
提交,因为要将两个版本的内容进行合并,只有在没有需要合并内容的时候,
会有这个fast-forward
方式的提交)。
如果我们对第一次合并,使用了--no-ff
参数,那么也会产生这样的结果,
生成一个新的提交,实际上等于是对C4
进行一次复制,创建一个新的commit
,这就是--no-ff
的作用。
参考