如何将分支的一部分重新绑定到主分支?

时间:2015-02-25 09:39:54

标签: git git-rebase

最初,我有这样的事情:

      C---D (branch1)
     /
A---B (master)

因为我需要处理其他事情(与branch1无关),所以我决定建立一个新的分支(称为branch2)。我在branch2上做了几次提交然后推了它们。

现在,我的目的是让master作为branch2的根。但是,我不小心这样做了:

            E---F--G (branch2)
           /
      C---D (branch1)
     /
A---B (master)

是否有一种干净的方式让branch2直接来自master,如下所示?

    E---F--G (branch2)
    |       
    | C---D (branch1)
    |/
A---B (master)

1 个答案:

答案 0 :(得分:3)

您问题中的ASCII图与第二个示例中的ASCII图表有着惊人的相似之处,这些示例描述了git-rebase man page--onto标志的用法:

  

--onto选项的另一个例子是重新定义分支的一部分。如果   我们有以下情况:

            H---I---J topicB
           /
      E---F---G  topicA
     /
A---B---C---D  master
     

然后命令

git rebase --onto master topicA topicB
     

会导致:

     H'--I'--J'  topicB
    /
    | E---F---G  topicA
    |/
A---B---C---D  master

该示例表明您将通过运行

降落到所需的状态
git rebase --onto master branch1 branch2

然而,您还写道,当您的repo看起来像第二张ASCII图时,您已经将branch2推送到某个遥控器。您是否与其他人共享有问题的遥控器?在这种情况下,在重新定位之前要三思而后(或三次!),因为它是历史重写的一种形式,you should never rewrite history has been shared