你需要做的就是告诉 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
ASIDE:我们可以使用不同的名称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
as master@{1}
(又名,master 之前的位置)
所以我们可以把这个 rebase 写成
git rebase --onto master master@{1} foo
提交的另一个描述cccccc
is foo^
(又名,foo 的父提交),所以我们也可以将其写为
git rebase --onto master foo^ foo
它们都做完全相同的事情,您可能更喜欢在不同的情况下使用不同的。我通常发现 SHA 使用起来很简单,因为在执行此类操作之前我经常会提取存储库的图表。