無名ブランチに残したcommitのハッシュ値やコメントやインデックスを見つける。

gitのお話。
masterブランチで作業しているとおもいきや、いつの間にか無名ブランチ*1に迷い込んでしましました。

$ git branch -l 
*
master

しかし、無名ブランチにいるとはつゆ知らず、作業して、addしてcommitして、さあ、pull --rebaseしようとしたら、できない。
masterブランチに切り替えます。

$ git checkout master
$ git branch -l
* master

だがしかし、masterブランチに移動したら、先ほどまで作業していたlogが消えてしましましたよ。(あたりまえですな)

こんな時は、.git/log/HEADを見ましょう*2。.git/log/HEADには、ローカルレポジトリ*3のコミットログとメッセージとハッシュ値が平文で格納されています。そして、このハッシュ値を元にmergeしたりブランチを切ればいいわけですな。

参考
taksatouの日記: gitで迷子になった(no branch)に復帰する方法

*1:別に無名ブランチだけじゃなくて、どのブランチのハッシュ値やコメントやインデックスについても、.git/log/HEAD にかいてあります。

*2:git reflogでもいいらしい

*3:ローカルレポジトリのコミットならブランチ横断的にログがまとめられている