【Git】以非快进方式合并分支来保留合并记录

快进式合并

git 中,分支合并时,如果能够采用快进(fast-forward, ff)方式合并,则会直接以快进方式合并,否则将产生一个新的合并提交。

比如下面的例子:

       F1---F2---  feature
      /
M1---M2----------  master

feature分支是从masterM2切出来的。之后 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 分支的历史合并记录就被完整地记录下来了。

改变默认行为

为 master 分支默认开启

执行下面的命令即可为当前仓库添加为 master 默认开启:

$ git config branch.master.mergeoptions  '--no-ff'

它会在.git/config文件中添加如下行:

[branch "master"]
    mergeoptions = --no-ff

为所以分支默认开启

$ git config --add merge.ff false

这将在.git/config文件中添加如下行:

[merge]
    ff = false

全局开启

注意,上面的两条只是对当前仓库而言,如果要全局默认开启,则记得在config命令后跟上--global参数。

参考

发表于:2018年8月19日,阅读量:73,标签:git

版权声明:若非特别注明,本站所有文章均为作者原创,转载请务必注明原文地址。