在重新定位的功能分支之上进行重组

时间:2016-01-18 19:57:47

标签: git rebase

我在使用rebase驱动的功能开发工作流程时遇到了一些麻烦。我将用图解释。

所以,假设我正在研究一个功能,所以我在提交B处从master分支。我有一些工作尚未准备好被推送到PR,所以我分支了一个子功能。

A -> B -> C # master
     |
     D -> E # feature
          |
          F -> G # subfeature

上游工作仍在继续,我需要更新PR,所以我重新命名功能分支:

$ git checkout feature
$ git rebase master

A -> B -> C # master
     |    |
     |    D' -> E' # feature
     |
     D -> E
          |
          F -> G # subfeature

让我们假设合并冲突是次要的,并且不会真正影响提交F和G中的工作。现在,我也想重新定义子特征分支。如果我只是运行git checkout subfeature && git rebase feature,它确实不起作用,因为那些共同的祖先是B.我想要的结构是:

A -> B -> C # master
          |
          D' -> E' # feature
                |
                F' -> G' # subfeature

...但我不知道如何实现它,不经过整个git rebase master并重新解决我在重新定位feature时已经做过的合并冲突。有可能吗?

1 个答案:

答案 0 :(得分:1)

一个选项是cherry-picksubfeature分叉到新feature分支的所有内容。

# Create a temporary branch and point it to 'feature' branch
git checkout feature
git checkout -b foo

# Now replay subfeature revisions
git cherry-pick E..G

# Verify that 'foo' looks correct and cleanup
git branch -D subfeature
git branch -m subfeature

请注意,您从您不想选择的修订开始,即E

我经常使用这个技巧。

请注意,您需要使用' force'推动' subfeature'如果它已经发布,则为远程。