.git/indexが壊れたときの対処法(の続き)
ある日、gitコマンドを実行したらエラーが返るようになった
Jenkinsを使ってUnityのiOS/Androidビルドやアセットバンドルビルドを
実行しているのはよくあることだと思うのですが、とある日
$ git status error: bad signature fatal: index file corrupt
このようなエラーがかえってくるようになり、ジョブが失敗し続けるようになってしまいました
ぐぐってみると、対処法が出てきたのでやってみました。
$ rm .git/index $ git reset $ git status error: bad signature fatal: index file corrupt
あれ、なおらない・・・
HEADの状態がおかしいのではと思い、git reflogしてみた
aeb40d6 HEAD@{0}: checkout: moving from b182e69ba8377b48eef37ba0edf6aeb46fb5fb7e to aeb40d6
b182e69 HEAD@{1}: checkout: moving from fda39c5be148812a5bab309284aa571186ce2057 to b182e69ba8377b48eef37ba0edf6aeb46fb5fb7e
あれ、HEADのコミットハッシュがおかしい・・・
ということで、
git reset --hard HEAD@{1}
をすることでなおりました。
HEAD@{1}とかの記号が分からない方はこちらを読むとよいです。
まとめ
- HEADの状態が壊れてるときは、.git/indexを再作成してもリポジトリが修復しない
- HEADが壊れているときは、git reflogで壊れてなかった過去を見つけてgit reset --hardする