引自:
http://www.burtonini.com/wordpress/2012/07/19/recovering-from-a-bad-git-rebase/
經測試可用,但是要注意,在選擇SHA1值的時候需要用checkout之前的那個
比如
$ git reflog
...
9f46daa HEAD@{142}: rebase -i (finish): returning to refs/heads/gtkdoc
...
8d7f266 HEAD@{166}: rebase -i (squash): glib-2.0: cleanup thanks to new gtk-doc.bbclass
a8f06b1 HEAD@{167}: rebase -i (squash): updating HEAD
0ac2f59 HEAD@{168}: rebase -i (fixup): # This is a combination of 3 commits.
a8f06b1 HEAD@{169}: rebase -i (fixup): updating HEAD
cccef4d HEAD@{170}: rebase -i (fixup): # This is a combination of 2 commits.
a8f06b1 HEAD@{171}: rebase -i (fixup): updating HEAD
c7ef1a6 HEAD@{172}: checkout: moving from gtkdoc to c7ef1a6
14bdd14 HEAD@{173}: commit: glib squash
...
這裏要用"checkout: moving from gtkdoc to c7ef1a6" 之前就是14bdd14這個值作爲checkout的點
$git checkout -b my_recovery_branch 14bdd14
這樣一來,my_recovery_branch的狀態就是squash之前的樣子