快进式合并
在 git 中,分支合并时,如果能够采用**快进(fast-forward, ff)**方式合并,则会直接以快进方式合并,否则将产生一个新的合并提交。
比如下面的例子:
F1---F2--- feature
/
M1---M2---------- master
feature
分支是从master
的M2
切出来的。之后 feature 产生了 2 个提交,master 没有提交。
此时,我在 master 分支下。如果我采用以下的命令进行 feature 到 master 的合并:
$ git merge feature
由于 master 上面没有新的提交,所以能够进行快进合并,合并后的分支如下:
M1---M2---F1---F2--- master/feature
也就是,master 和 feature 在同一个位置。master 直接快进到 feature 到了。
非快进式合并
如果我们想保存合并历史记录,像下面这样,强制在 master 上产生一个新的合并提交:
F1---F2---feature
/ \
M1---M2--------MC--- master
其中的MC
就是强制产生出的新合并。应该怎样做?不快进合并即可。
在 merge 的时候指定--no-ff
,即可以非快进方式合并,达到上面的结果。
$ git merge --no-ff feature
此时再考虑删除 feature 分支,在 feature 分支的历史合并记录就被完整地记录下来了。