煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

git bad default revision 'HEAD' に困ったので手動修正したけど不安しか残らなかった

VirtualBox上のCentOSで開発をしていて、ある日VMがフリーズしたので渋々強制再起動したらローカルリポジトリが壊れた。
表題のエラーが出たのでとりあえず修復したが、完全に直っているか不安で結局リポジトリをcloneし直したという記録。

gitコマンドが軒並み失敗する

$ git status
fatal: bad default revision 'HEAD'

$ git log
fatal: bad default revision 'HEAD'

!?
どういうことやと思ってHEADの中身を見てみる

$ cat .git/HEAD
ref: refs/heads/mybranch

よしよし、直近で作業してたブランチのままだ
ブランチのファイルを念のため確認

$ find -name *mybranch*
./.git/refs/heads/mybranch
./.git/refs/remotes/origin/mybranch

ファイルはあるなー
中身どうなってんだろ

$ cat .git/refs/heads/mybranch
(空)
$ cat .git/refs/remotes/origin/mybranch
(空)

あー何も無い
HEADコミットのSHAが取れないからエラーになってるのかな
リモートからブランチの最新コミットを見つけて手動で埋めてみる

$ git ls-remote origin mybranch
リモート上の最新SHA	refs/heads/mybranch

$ echo -n "リモート上の最新SHA" > .git/refs/heads/mybranch

とりあえずこれで動くようにはなったけど...
VMフリーズの影響で一部ファイルが壊れていたようで、他にも影響が残っている可能性があるし、
手動でファイル書き換えているので完全に直っている保証もないんだよなー
で、結局不安だらけだったのでリポジトリをcloneし直した。

あれこれ終わってから気づいたけど、せめてファイルが編集状態のまま残っているか確認して退避させればよかった
気持ち悪いからと、後腐れなく削除した後だった...