合并分支的交互式Rebase

时间:2012-07-08 11:28:19

标签: git git-rebase

我正在使用git,我正处于这种状态:

      X --- Y --------- M1 -------- M2 (my-feature)
     /                 /           /
    /                 /           /
   a --- b --- c --- d --- e --- f (stable)

当我们在'my-feature'分支上工作超过一天时会发生这种情况。 从稳定分支到特征分支合并M1和M2。 M1和M2可能已合并已解决的冲突。 将稳定分支合并到特征分支的整个想法是尽早处理冲突。

一旦功能完成,我们希望将功能分支重新绑定为一个或两个提交。

问题是当我们进行交互式rebase git向我们展示我们在M1和M2合并期间已经解决的相同合并冲突。

有没有办法让git重用我们在M1和M2中已经完成的合并决定?

4 个答案:

答案 0 :(得分:10)

如果合并冲突相同,这是git rerere的完美用例,这是git中最有用的(尽管鲜为人知的)命令之一。从手册页:

  

在使用相对长寿的主题分支的工作流程中,开发人员有时需要一遍又一遍地解决相同的冲突,直到   主题分支已完成(或者合并到“发布”分支,或者发送并接受上游)。

     

此命令通过在初始手册上记录冲突的自动注射结果和相应的手部分辨率结果,帮助开发人员完成此过程   合并,并将先前记录的手部分辨率应用于相应的自动注册结果。

git rerere会记录您的冲突解决方案,并在git mergegit rebasegit commit(提交合并时)遇到相同冲突时自动应用这些冲突。 Scott Chacon posted some great examples here,man page is also worth a read.

您可以通过发出以下命令在git rereremerge中启用rebase

git config --global rerere.enabled true

如果您只想为单个存储库启用该选项,请删除--global标志。

答案 1 :(得分:6)

git rebase --interactive --preserve-merges

答案 2 :(得分:2)

使用单个提交将功能分支feature放入新分支feature-one-commit的明确方法:

git checkout -b feature-one-commit \
"$(git commit-tree HEAD^{tree} -m "Commit message" -p master)"    

答案 3 :(得分:0)

您总是可以使用-f标志强制它