从坏的 rebase 中恢复

假设你已经启动了交互式 rebase:

git rebase --interactive HEAD~20

并且错误地,你压扁或丢弃了一些你不想丢失的提交,但随后完成了 rebase。要恢复,请执行 git reflog,你可能会看到如下输出:

aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...

在这种情况下,最后一次提交,ddddddd(或 HEAD@{n+1})是你的 rebase 分支的提示。因此,要恢复该提交(以及所有父提交,包括意外压扁或丢弃的提交),请执行以下操作:

$ git checkout HEAD@{n+1}

然后,你可以使用 git checkout -b [branch] 在该提交中创建一个新分支。有关更多信息,请参阅分支