最初,我有这样的事情:
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)
答案 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。