复杂的git rebase机动

时间:2010-05-21 19:58:49

标签: git

查看git-rebase手册页,我没有看到任何看起来像我想要的图表(除了一些看起来与我想要的相反),并且在玩--onto没有得到我想要的东西。

让我看看我是否可以绘制类似git-rebase手册页中的图表(左侧的垂直条使Markdown格式正确):

|      o-o-o-o-branch2
|     /
| -o-o-A-master-o-branch1-o-o-my_WIP_branch

branch1在这里可能并不重要,但无论如何我都把它包括在内。我想要做的是(省略'手册页图中通常附带的git-rebase

|     o-o-o-o-branch2-o-branch1-o-o-my_WIP_branch
|    /
|-o-o-A-master

基本上,我希望将my_WIP_branch工作放在branch2工作上,而不必处理标记为A的提交组中涉及的合并冲突。有没有办法做到这一点,除了手动挑选每个提交branch2(或者至少是否有一个简单的方法来做到这一点?)?顺便说一句,会有合并冲突,所以理想情况下它应该是一个git命令或git命令组,可以优雅地处理它们(例如,git rebase优雅地处理它们,git amgit apply不要)。

1 个答案:

答案 0 :(得分:4)

奇怪......因为这应该是rebase --onto的经典案例。

你有:

     o-o-o-o <--branch2
    /
 o-o-o-A <--master
        \
         -o-o <--branch1
             \
              -o-o <--my_WIP_branch

你想:

                  -o-o <--my_WIP_branch
                 /
             -o-o <--branch1
            /
     o-o-o-o <--branch2
    /
 o-o-o-A <--master

应该是:

$ git rebase --onto branch2 master my_WIP_branch

它将重播任何不在master上的提交,但是从你可以到达my_WIP_branch的地方(意味着来自branch2的提交不符合条件)。
请参阅我的other SO answer for merge conflict instructions和Git手册的"resolving merge conflicts" section。 (你可以accept all merges with your version, for instance