Uniforceのインフラ担当のニシです。

この記事を書いている頃は、ファミリーマートにあるAfternoon Tea監修のアールグレイティー無糖にハマっています。

ちなみに、Afternoon Tea TEAROOMに行ったときはチャイクリームフロートを好んで飲みます(甘い飲み物、食べ物、好き🤤)。

今回はGitの”error: object file **** is empty”や”fatal: loose object *** is corrupt”に遭遇したときのお話です。

きっかけ

普段通りに作業をしているときにgit操作を行うと次のエラーが出力されました。

error: object file .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a is empty
error: object file .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a is empty
fatal: loose object 0e2af20a67078ed37acd51b4abde36fb72f78f6a (stored in .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a) is corrupt

どうやら.gitに保存してあるデータが破損しているようでした。

調べてみると、直し方としては

  1. 別の場所でエラーが発生したリポジトリをcloneして.gitの中身を丸ごとコピーする
  2. .gitにある空のファイルを削除、その後HEADの位置を修正

があるようでした。

今回は、2.の方法で直してみます。

解決

Git のエラー "object file is empty" や "loose object is corrupt" の直し方を参考にさせてもらい、”.gitにある空のファイルを削除、その後HEADの位置を修正”を行っていきます。

まずは、現状を確認してみます。

❯ git status
error: object file .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a is empty
error: object file .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a is empty
fatal: loose object 0e2af20a67078ed37acd51b4abde36fb72f78f6a (stored in .git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a) is corrupt

”error: object file **** is empty”や”fatal: loose object *** is corrupt”のエラーが発生している状況です。

空のファイルが存在するか確認してみます。

❯ find .git -type f -empty

.git/objects/0e/2af20a67078ed37acd51b4abde36fb72f78f6a
.git/FETCH_HEAD

エラーで表示されていたファイルと同じものが空ファイルとして表示されています。

それでは、空のファイルを削除します。

❯ find .git -type f -empty -delete

再度、現在の状態を確認してみます。

 ❯ git status
fatal: bad object HEAD

gitのHEADの位置が参照できなくなるエラーに変わりました。

HEADの位置を修正するために、現在のブランチ(ここではfeature/functions)の履歴を確認します。

❯ tail -n 2 .git/logs/refs/heads/feature/functions
869c16fface3110a19971f295364d9278516ac4c 7e25672878e0120d6b5006e88f4f1a02551c3aeb Yuki-Nishi-UNF [158530148+Yuki-Nishi-UNF@users.noreply.github.com](<mailto:158530148+Yuki-Nishi-UNF@users.noreply.github.com>) 1732105985 +0900 commit: feat: 🎸 func.tsでスケジュール実行を設定できるように変更

2つ目のコミットID “7e25672878e0120d6b5006e88f4f1a02551c3aeb” をHEADとして参照するように変更します。

❯ git update-ref HEAD 7e25672878e0120d6b5006e88f4f1a02551c3aeb

再び、現在の状態を確認すると、、、無事にコマンドが実行されました。

❯ git status

On branch feature/functions
Your branch is ahead of 'origin/feature/functions' by 2 commits.
(use "git push" to publish your local commits)

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: lib/construct/func.ts

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: lib/test-stack.ts
modified: parameters.ts

まとめ

Gitの”error: object file **** is empty”や”fatal: loose object *** is corrupt”のエラーのお話でした。

今回は試してみたい気持ちもあり”.gitにある空のファイルを削除、その後HEADの位置を修正”の方法で解決をしてみましたが、リモートリポジトリにコミット履歴がある場合は“別の場所でエラーが発生したリポジトリをcloneして.gitの中身を丸ごとコピーする”の方がより早く解決することができると思います。

本日の記事はここまでとなります。

最後まで読んでいただきありがとうございました🙌