shou2017.com
JP

How to Fix Git Error: object file is empty

Mon Sep 10, 2018
Sat Aug 10, 2024
Git

When I ran git pull, I got the following error. I think this was probably caused by a forced shutdown while working in a virtual environment.

$ git pull
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty

After searching online, I found others who had encountered similar situations, so I’ll use their solutions as reference.

how to fix GIT error: object file is empty?

The directory with the error is called “boku”. First, I’ll back up the .git directory.

$ cp -a .git .git-old

Next, I’ll run git fsck. git fsck is a command that checks the validity of a repository. It essentially verifies whether the repository is damaged.

To run a full check with all options, add the --full flag.

$ git fsck --full
error: object file .git/objects/1b/6c2b8e42bdd36d9e47db64f56a85de6fa08e8c is empty
error: unable to mmap .git/objects/1b/6c2b8e42bdd36d9e47db64f56a85de6fa08e8c: No such file or directory
error: 1b6c2b8e42bdd36d9e47db64f56a85de6fa08e8c: object corrupt or missing: .git/objects/1b/6c2b8e42bdd36d9e47db64f56a85de6fa08e8c
error: object file .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675 is empty
error: unable to mmap .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675: No such file or directory
error: 4bec3106065cbeadf20c41aa8b69c605cd6a2675: object corrupt or missing: .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675
error: object file .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72 is empty
error: unable to mmap .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72: No such file or directory
error: 915805b29b6bab1a0436048413830f68412e0f72: object corrupt or missing: .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72
error: object file .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a is empty
error: unable to mmap .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a: No such file or directory
error: 9ef4a120cddf5154432bb1571a3e3a76e8c33f3a: object corrupt or missing: .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
error: unable to mmap .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9: No such file or directory
error: a891cc99653125f51ae5808661b3c4857ecae4d9: object corrupt or missing: .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9
Checking object directories: 100% (256/256), done.
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
fatal: loose object a891cc99653125f51ae5808661b3c4857ecae4d9 (stored in .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9) is corrupt

I’ll use the rm command to delete the empty objects. Let’s try deleting the first one: 6c2b8e42bdd36d9e47db64f56a85de6fa08e8c.

$ rm .git/objects/1b/6c2b8e42bdd36d9e47db64f56a85de6fa08e8c
It asks: "rm: remove write-protected regular empty file '.git/objects/1b/6c2b8e42bdd36d9e47db64f56a85de6fa08e8c'?"
I'll answer with y.

Let’s check if it was deleted:

$ git fsck --full
error: object file .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675 is empty
error: unable to mmap .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675: No such file or directory
error: 4bec3106065cbeadf20c41aa8b69c605cd6a2675: object corrupt or missing: .git/objects/4b/ec3106065cbeadf20c41aa8b69c605cd6a2675
error: object file .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72 is empty
error: unable to mmap .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72: No such file or directory
error: 915805b29b6bab1a0436048413830f68412e0f72: object corrupt or missing: .git/objects/91/5805b29b6bab1a0436048413830f68412e0f72
error: object file .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a is empty
error: unable to mmap .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a: No such file or directory
error: 9ef4a120cddf5154432bb1571a3e3a76e8c33f3a: object corrupt or missing: .git/objects/9e/f4a120cddf5154432bb1571a3e3a76e8c33f3a
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
error: unable to mmap .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9: No such file or directory
error: a891cc99653125f51ae5808661b3c4857ecae4d9: object corrupt or missing: .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9
Checking object directories: 100% (256/256), done.
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
error: object file .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9 is empty
fatal: loose object a891cc99653125f51ae5808661b3c4857ecae4d9 (stored in .git/objects/a8/91cc99653125f51ae5808661b3c4857ecae4d9) is corrupt

It was successfully deleted. However, deleting them one by one would be time-consuming, so I’ll use find . -type f -empty -delete -print to delete them all at once.

$ find . -type f -empty -delete -print

Let’s verify. The “empty” errors are gone.

$ git fsck --full
Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer a891cc99653125f51ae5808661b3c4857ecae4d9
error: refs/heads/master: invalid sha1 pointer a891cc99653125f51ae5808661b3c4857ecae4d9
error: refs/remotes/origin/master: invalid sha1 pointer a891cc99653125f51ae5808661b3c4857ecae4d9
notice: No default references
missing blob 1b6c2b8e42bdd36d9e47db64f56a85de6fa08e8c
missing blob 4bec3106065cbeadf20c41aa8b69c605cd6a2675
missing blob 915805b29b6bab1a0436048413830f68412e0f72

Since HEAD is broken, I’ll run git reflog to check the history.

$ git reflog
fatal: bad object HEAD

Now I’ll look for the commit just before HEAD was broken. The tail command displays the last few lines of a file. By default, it shows 10 lines.

$ tail -n 2 .git/logs/refs/heads/master
99a1a3c6810c3676ca68d8e8c8b877862f16d1fb 30624b143c564c14b700a30c7555a3f173a6c035
vagrant <[email protected]> 1536051562 +0000	commit: create dockerfile

I’ll run git show to check the details of the commit. The first hash value in the second line refers to the previous commit.

$ git show 30624b143c564c14b700a30c7555a3f173a6c035
error: refs/heads/master does not point to a valid object!
error: refs/remotes/origin/master does not point to a valid object!
commit 30624b143c564c14b700a30c7555a3f173a6c035
Author: vagrant <[email protected]>
Date:   Tue Sep 4 08:59:22 2018 +0000

    create dockerfile

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..45d61e9
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,5 @@
+#利用するUbuntuのイメージ
+FROM ubuntu:14.04 
+
+# wgetとdpkgをインストール
+RUN apt-get update && apt-get install -y wget dpkg
diff --git a/boku_rspec.md b/boku_rspec.md
index a592589..ff89da6 100644
--- a/boku_rspec.md
+++ b/boku_rspec.md
@@ -16,6 +16,7 @@ Gemfile

:

I’ll replace HEAD with this commit:

$ git update-ref HEAD 30624b143c564c14b700a30c7555a3f173a6c035

Let’s check with git fsck:

$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/remotes/origin/master: invalid sha1 pointer a891cc99653125f51ae5808661b3c4857ecae4d9
missing blob 1b6c2b8e42bdd36d9e47db64f56a85de6fa08e8c
missing blob 4bec3106065cbeadf20c41aa8b69c605cd6a2675
missing blob 915805b29b6bab1a0436048413830f68412e0f72

Since I’m still getting errors related to the deleted commits, I’ll delete the index file after git add.

$ rm .git/index
$ git reset
Unstaged changes after reset:
M	boku_rspec.md
M	docker.md

Let’s check once more:

$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/remotes/origin/master: invalid sha1 pointer a891cc99653125f51ae5808661b3c4857ecae4d9
dangling blob 045d5dd428f1d36a5e3740b59409d58bae0d9816

Let’s run git status:

$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   boku_rspec.md
	modified:   docker.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	.git-old/
	rails_helper.rb
	tasks_controller_spec.rb

no changes added to commit (use "git add" and/or "git commit -a")

From this point, all that’s left is to commit and push.

See Also