mikan_daisuki’s blog

IT系サラリーマンの日記。前職ではスマホゲームを、現在はアプリを作ってます。



.git/indexが壊れたときの対処法(の続き)

ある日、gitコマンドを実行したらエラーが返るようになった

Jenkinsを使ってUnityのiOS/Androidビルドやアセットバンドルビルドを

実行しているのはよくあることだと思うのですが、とある日

$ git status
error: bad signature
fatal: index file corrupt

このようなエラーがかえってくるようになり、ジョブが失敗し続けるようになってしまいました 

www.nowhere.co.jp

ぐぐってみると、対処法が出てきたのでやってみました。

$ 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}とかの記号が分からない方はこちらを読むとよいです。

qiita.com

まとめ

  • HEADの状態が壊れてるときは、.git/indexを再作成してもリポジトリが修復しない
  • HEADが壊れているときは、git reflogで壊れてなかった過去を見つけてgit reset --hardする