3
2

More than 3 years have passed since last update.

Git fatal: Unknown index entry format

Last updated at Posted at 2019-11-12

備忘録的に。
間違ったshellを動かしてgitレポジトリをぶっ壊してしまったとき。(.git ファイルなど隠しファイルにも影響を与えてしまった場合。。)

$ git checkout .

を行なっても下記エラー。

fatal: Unknown index entry format x56axxxx

ほなとりあえずローカルレポジトリのremoteとの紐付け消すか、としたら

$ git remote rm origin
error: non-monotonic index .git/objects/pack/pack-12kjneffselfnwj3jwjk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjnadwselfnwj3jwjk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjnefffslfnwj3jwwk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjneawselfnwj3jwjk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjneffselfnwj35wjk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjneffssdfnwj3jwjk3wdnsdjknajw3dwdsjnd.idx
error: non-monotonic index .git/objects/pack/pack-12kjneffawdfnwj3jwjk3wdnsdjknajw3dwdsjnd.idx

うおお。なにこれ。

$ git fsck --full
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack header of .git/objects/04/4c9cedaw427385a0aae914bea384fc45ba03236

したら同じようなログが1000行以上でてきた。これはもうちょっと解析できるレベルではない。

新しく同じ名前のディレクトリをつくって git remote add してから git pull しても下記。

$ git pull origin master
error: refs/heads/master does not point to a valid object!
error: inflate: data stream error (invalid block type)
error: unable to unpack xxxdc4ae26830ab44ae2746c52865556a4d993c1 header
error: inflate: data stream error (invalid block type)
error: unable to unpack xxxdc4ae26830ab44ae2746c52865556a4d993c1 header
fatal: loose object xxxdc4ae26830ab44ae2746c52865556a4d993c1 (stored in .git/objects/xx/xxx4ae26830ab44ae2746c52865556a4d993c1) is corrupt

おそらくだが .git までshellで変更してしまったから、もうこれは直せないと感じ、
下記を試しました。現状のリモートディレクトリの .git を持ってきて自分のローカルのものと置き換える。

Git: “Corrupt loose object”

The fix
Execute these commands from the parent directory above your repo (replace 'foo' with the name of your project folder):

Create a backup of the corrupt directory:

cp -R foo foo-backup

Make a new clone of the remote repository to a new directory:

git clone git@www.mydomain.de:foo foo-newclone

Delete the corrupt .git subdirectory:

rm -rf foo/.git

Move the newly cloned .git subdirectory into foo:

mv foo-newclone/.git foo

Delete the rest of the temporary new clone:

rm -rf foo-newclone

これで元に戻りました。
ありがとうStackOverflow.
今回、ローカルだったのでぶっ壊れてもなんとかなりましたが、これをリモート側でやってしまったら結構取り返しのつかない大事件になるところでした。
リモート先で実験する場合はmasterレポジトリをbackupした先で行うことが必要だと再実感できてよかったです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2