從壞的 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] 在該提交中建立一個新分支。有關更多資訊,請參閱分支