Git rebase / workflow confusion - 需要提取上游提交的分支的正确工作流程是什么?

时间:2014-03-18 08:32:05

标签: git git-rebase

这是我的设置:我已经分支了#34; master",并且无意合并" my_branch"回到主人。但是,我想继续获得掌握的所有更新。

如果我在MC1(主提交#1)上分支主服务器,并向my_branch(BC1和BC2)添加新提交,并且有人在此期间向主服务器(MC2)添加新提交,我希望历史记录为:

MC1<-MC2<-BC1<-BC2

过去,我用过:

git fetch origin
git rebase origin/master

到目前为止一切顺利。它重播BC1和BC2,我修复了合并冲突,并且重新设定 - 继续直到完成。但是,最终提交涉及合并&#34;合并分支&#34; my-branch&#34; github ....进入我的分支(也许那就是开始出错的地方?)

然后我向我的分支添加了更多提交(BC4,BC5)。与此同时,MC3被添加到master。所以我再次尝试改变......

重播BC1。我必须重做我已经处理的合并冲突(例如,我在MC1中从MC1更改的代码没有从MC1通过MC3更改)。我发现自己不得不挑选合并冲突,以后补丁会自行改变。 my_branch历史现在包括每个额外的rebase分散的BC1的多个副本。

有没有更好的方法来处理上游变更的分支和合并?

1 个答案:

答案 0 :(得分:1)

我强烈建议您重新考虑是否绝对需要变基。将上游合并到您的分支可能是更好的选择:

git fetch origin
git merge origin/master

这将:

  1. 两次不发出相同的合并冲突
  2. 不重复提交
  3. 重新绑定本质上会重新创建您正在变基的所有提交,因此正常/预期,您的历史记录包含同一提交的多个版本。

    通过合并工作流程,您的历史记录将如下所示:

    MC1     <-     MC2        <-        MC3 
     ^              ^                    ^
      \              \                    \
      BC1 <- BC2 <- BC3 <- BC4 <- BC5 <- BC6
    

    BC3BC6是合并提交,解决潜在冲突。

    恕我直言,对于以下方面来说,变基是一个好主意:

    1. 短期分支机构(例如远程跟踪分支机构)
    2. 具有少量提交的分支(例如,在配置文件中设置值)
    3. 另一种选择是将所有提交压缩为单个提交,实际上保护您不必每次都解决合并冲突。但是,由于这会使你失去历史,它可能不是一种选择。