你需要做的就是告诉 git 从哪里开始变基:你可以这样做
git rebase --onto master SOMESHA foo
其中 SOMESHA 是旧主 SHA。那就是如果你的树现在看起来像这样
* aaaaaa - (master)
| * bbbbbb - (foo)
| * cccccc - (old master)
|/
* ffffff
你也是
git rebase --onto master cccccc foo
然后,您的树将如下所示。
* dddddd - (foo)
|
* aaaaaa - (master)
|
* ffffff
旁白:cccccc
如果您不喜欢使用 SHA 值,我们可以为提交使用不同的名称。
> git reflog master
aaaaaa master@{0}: reset: moving to something
cccccc master@{1}: commit: change the froozle
ffffff master@{2}: commit: snarf the froozle
这意味着我们可以引用cccccc
为master@{1}
(AKA,master 的先前位置)
所以我们可以把这个变基写成
git rebase --onto master master@{1} foo
提交的另一个描述cccccc
是foo^
(AKA,foo 的父提交),所以我们也可以把它写成
git rebase --onto master foo^ foo
他们都做同样的事情,你可能更喜欢在不同的情况下使用不同的。我通常发现 SHA 使用起来很简单,因为我经常会在执行此类操作之前拉出我的存储库的图表。