git log で「data stream error (incorrect header check)」とか「fatal: loose object XXXX (stored in .git/objects/xx/XXXX) is corrupt」が出る件

事象

とあるローカルリポジトリにて、先週くらいから git log するとエラーが出るようになった。まず Tortoise Git の Show log でエラーが出て、なんでだろと git コマンドで git --no-pager log をして全件表示してみると、ずいぶんと過去のコミットのところで以下が出る。

$ git --no-pager log
...
...
error: inflate: data stream error (incorrect header check)
error: unable to unpack XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX header
fatal: loose object XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (stored in .git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY) is corrupt

なぜかは知らんが Git オブジェクトが壊れてるみたいだ。

解決方法

以前バックアップしてたローカルリポジトリの .git/objects/xx/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY で上書きした

上書きする前、WinMerge で .git/objects/xx/ の差分を取ってみたら、見事に YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY のみに差分が出ている状態だったので、試しに上書きしてみたらエラーが出なくなった……という具合。

試したけどダメだったこと

上記は全部ダメだった。

で、壊れた原因は?

不明。

申し訳ないが Git オブジェクトを勉強するほど物好きではないです。……といいつつ、勉強して中身読んだりすると楽しいかもしれないなと思ったり。気が向いたら。