なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Git で fatal: index file smaller than expected

git status しようとしたら、「fatal: index file smaller than expected」と怒られた。
原因は、多分仮想マシンが落ちたからだと思うけれど、直し方をメモしておきます。


以下作業ログ
リポジトリディレクトリは ~/lepus とします。

$ git status
fatal: index file smaller than expected

$ cd ..
$ cp -r lepus lepus-backup
$ cd lepus
$ rm .git/index

と、ここまですると治るみたいだけれども、残念ながらまだエラーがでてた。

$ git add -A
error: object file .git/objects/a1/a1b2c3... is empty

なんか壊れてるっぽいので、empty なファイルを 1 つ 1 つ直していく。

$ git fsck --full
(略)
error: object file .git/objects/a1/a1b2c3... is empty
$ rm .git/objects/a1/a1b2c3

調べると過去の履歴から復元しているのが多かったけど、
今回 commit してないものが壊れたので、履歴は存在しない。

ということで、別のやり方で。

$ git fsck --name-objects | grep missing
(↓多分こんな感じだった)
missing blob a1b2c3.... (app/controller/users_controller.rb)
$ git rm --cached app/controllers/users_controller.rb
$ git add app/controller/users_controller.rb

これを繰り返して、なくなったら修正完了。
合ってるかわからないけども、とりあえずちゃんとなってるからいいかな。

参考: