最初,我有这样的经历:

      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)

最佳答案

问题中的ascii图形与第二个示例中描述--onto man pagegit-rebase标志用法的图形有着不可思议的相似之处:
--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

10-06 02:14