如何将分支的一部分变基到主分支?

How can I rebase part of a branch to the master branch?

原来我是这样的:

      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 图与描述 git-rebase man page--onto 标志用法的第二个示例中的那些非常相似:

Another example of --onto option is to rebase part of a branch. If we have the following situation:

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

then the command

git rebase --onto master topicA topicB

would result in:

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

该示例表明您将在 运行

之前到达所需的情况
git rebase --onto master branch1 branch2

但是,您还写道,当您的回购看起来像您的第二个 ASCII 图时,您已经将 branch2 推送到某个远程。您是否与其他人共享有问题的遥控器?在那种情况下,在变基之前三思(或三次!),因为它是历史重写的一种形式,you should never rewrite history has been shared.