引自:
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之前的样子