ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Git の object がおかしいというエラーが出た場合は object を表すファイルを消せば良さそう

Git 使ってたんですよ、Git。 コミットするぜー、って思って git add した後に PC がおかしくなって強制終了しちゃったんですよ。

まあそこまではいいですよ、糞 PC 使いにはよくあることです。 いや、よくないけどさ。

でだ。 再起動した後で git status してみたら git add した状態になっていたので、そのまま git commit でコミットしようとしたら以下のようなエラーが発生。

[dev +3 ~1 -0 | +0 ~1 -0]> git commit 
error: unable to unpack 48b43e04f8a6c36f43e7fd795064be0ea680595d header
error: inflateEnd: stream consistency error (no message)
fatal: 48b43e04f8a6c36f43e7fd795064be0ea680595d is not a valid object

うぐぐ。 48b43e04f8a6c36f43e7fd795064be0ea680595d という sha1 のオブジェクトがおかしいってことのようです。 git add をやり直してみたりしてもうまくいかず。

オブジェクトを表すファイルを消してみる

どうすりゃいいかよくわかんなかったけど、オブジェクトがおかしいならそのオブジェクトを表すファイルを消して git add しなおせばオブジェクトファイルを作り直してくれてうまくいくんじゃないかなー、ってことでファイルを消して試してみるとエラーが解消されました。

Git のオブジェクトを表すファイルは .git/objects/XX/YYYYYYYYY (XXsha1 の上位 2 桁、YYYYYYYYYsha1 から上位 2 桁を除いたもの) にあるので、そのファイルを消せばよいです。

他にも以下のようなエラー (?) が出たりもしたけど、こっちも同様にオブジェクトのファイルを消して git add しなおせば解消しました。

[dev +3 ~1 -0 | +0 ~1 -0]> git commit
[dev fatal: loose object bf82f3c3436a1b48c19c80ad7a39c500d9bede2c
 (stored in .git/objects/bf/82f3c3436a1b48c19c80ad7a39c500d9bede2c) is corrupt

オブジェクトのファイルが壊れた原因によっては単純にファイルを消しても問題が解消しない場合もあると思いますが、git add してコミットしようとしたオブジェクトがおかしい場合は、オブジェクトを表すファイルを消して git add し直せば良さそうです。 (他の解決方法があれば教えてください。)