A--B--C master
\
D branch0
然后我压扁B
和C
到B'
。 我如何变基branch0
,使得它看起来像这样:
A--B' master
\
D branch0
A--B--C master
\
D branch0
然后我压扁B
和C
到B'
。 我如何变基branch0
,使得它看起来像这样:
A--B' master
\
D branch0
一个快速的方式,我能想到的是,
git checkout branch0
记下d的SHA通过git log
git checkout master
现在将branch0重命名为branch1
git branch -m branch0 branch1
A--B' master \ D branch1
现在删除BRANCH1
git branch -D branch1
再次创建一个branch0如下。 git checkout -b branch0
A--B' - master&branch0
上面的命令master和branch0是一样的。只有改变我们需要branch0要提出的是获得承诺D.
git cherry-pick D
现在branch0看起来如下
A--B' master \ D branch0
使用--onto
参数与git底垫中,从而改变了基线git重播工作。
git checkout branch0
在这种状态下,你仍然应该在你的git历史IIUC中看到C.
git rebase --onto B' C
这意味着“采取一切提交在我目前的分公司自提交C(在你的情况那只是d)和play银行ontop的B'的”
您也可以使用可选的<branch>
参数同时做结帐和rebase:
git rebase --onto B' C branch0
没有结帐(更短):'git rebase - 主人C branch0' – jbaptperez
谢谢。我已将这一建议添加到答案中。我还重新排序了上游和上游参数,以便与您的git手册页相匹配(即使进行了简短测试的逆向作品)。 – pcrost