gitで`fatal: unable to read tree ~~`となって困った話


概要

error: object file .git/objects/hogehoge/hugahugahuga is empty
とか
fatal: unable to read tree hogehuga
というエラーが発生して該当ファイルの削除をしたり色々試した結果
git stashresetもできずプッシュもチェックアウトもできなくなって詰んだ
↓↓↓
git checkout --force [ブランチ名]で、無理やりそのブランチから逃げて、新しく別のブランチを作って作業し直した(変更箇所はメモしておこうな(自戒))

環境

  • gitlab
  • ubuntu - 16.04.4 LTS
  • git - 2.7.4

どんなことがあったか

先日仮想環境が落ちて再起動したところ
error: object file .git/objects/hogehoge/hugahugahuga is empty
という感じのエラーに遭遇した

ネットでそれらしい記事を探したところ、以下の記事を見つけたので試してみて
https://bokunonikki.net/post/2018/0910_git_object_empty/
ひとまず上手くいったように見えたが、pushかstashをしようとしたときにタイトルにも書いた以下のエラーが発生してコマンドが実行されない状態に陥ってしまった。
fatal: unable to read tree hogehuga

そこで「強制チェックアウトならあるいは?」と思いgit checkout --force developを実行したところ成功。
ブランチを一度削除してもう一度リモートからブランチを取ってきて作業を進めた。
これで上手くいったと思いきや、コミットしようとした際にまたobject file ~~ is emptyの文字が...

環境構築やり直し?うっ、頭がorz

結局どうしたのか

そんなに時間を割く余裕もなかったので最終的には、再度git checkout --forceでブランチを変えて、リモートのgitlab上で新たにブランチを作成してそこでもう一度同じ作業をやり直した。
(せめて変更箇所をメモ帳か何かにコピっておけばよかったorz)

結論

  • タイトルのエラーが発生してgitのコマンドが思うように使えなくなっても、git checkout --forceでとりあえずそのブランチから逃げられた
  • コミットとプッシュはこまめにしよう

原因の推測

仮想環境が落ちてしまった時に、プッシュしていなかった新規ファイルがおかしくなってしまったのではないかと思う。(一度ブランチを削除した後に、再度同じ新規ファイルを作成したらエラーになったからという安直な推測)

気が向いたら再現するかどうか試してみようと思う