您只需要告诉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
顺带一提:如果你不喜欢使用SHA值,我们可以为cccccc
提交使用不同的名称。
> 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}
(也就是master的先前位置)。
因此,我们可以将此rebase编写为
git rebase --onto master master@{1} foo
提交 cccccc
的另一种描述是 foo^
(也称为 foo 的父提交),因此我们也可以这样写:
git rebase --onto master foo^ foo
它们都完全执行相同的操作,您可能会根据不同情况喜欢使用不同的操作方式。通常我发现SHA易于使用,因为在执行这种操作之前,我经常会拉取仓库的图形。