How to deal with fatal: bad object HEAD in git
swyx 2023-07-24
as a cheapo who uses Apple iCloud (the worldβs worst sync service) as a sync service for my Obsidian Second Brain, I have recently run into this issue a lot:
$ git status
fatal: bad object HEAD
$ git log
fatal: bad object refs/heads/main
Iβve had to fix this a few times, and only recently worked it out with ChatGPT. Saving here for posterity:
$ git fetch origin
# hopefully this is good enough for git status to start working again
$ git pull
# NOTE: THIS WILL DESTROY ANY UNCOMMITTED/UNSAVED CHANGES - take care before running it
$ git reset --hard origin/main
This may show you some bad objects:
remote: Enumerating objects: 3899, done.
remote: Counting objects: 100% (888/888), done.
remote: Compressing objects: 100% (364/364), done.
remote: Total 3899 (delta 554), reused 597 (delta 523), pack-reused 3011
Receiving objects: 100% (3899/3899), 1.32 MiB | 9.92 MiB/s, done.
error: corrupt loose object 'dc3711cb3ba71eefe40c8e49cc9c9fb311d29553'
fatal: loose object dc3711cb3ba71eefe40c8e49cc9c9fb311d29553 (stored in .git/objects/dc/3711cb3ba71eefe40c8e49cc9c9fb311d29553) is corrupt
fatal: fetch-pack: invalid index-pack output
fatal: Could not parse object 'origin/main'.
So the fix is this:
rm -f .git/objects/dc/3711cb3ba71eefe40c8e49cc9c9fb311d29553
git fetch origin
(July 31 update) corrupt loose object
I also had this issue today:
$ git fsck
error: corrupt loose object '25726bffc0e97532098679d0ed04095710452d29'
error: unable to unpack contents of .git/objects/25/726bffc0e97532098679d0ed04095710452d29
error: 25726bffc0e97532098679d0ed04095710452d29: object corrupt or missing: .git/objects/25/726bffc0e97532098679d0ed04095710452d29
error: corrupt loose object '5b4e2ac94c33715545674545e501a705ea20924b'
error: unable to unpack contents of .git/objects/5b/4e2ac94c33715545674545e501a705ea20924b
error: 5b4e2ac94c33715545674545e501a705ea20924b: object corrupt or missing: .git/objects/5b/4e2ac94c33715545674545e501a705ea20924b
error: corrupt loose object 'ad7ceee5b187af409cbd2219bc4b578faf425471'
error: unable to unpack contents of .git/objects/ad/7ceee5b187af409cbd2219bc4b578faf425471
error: ad7ceee5b187af409cbd2219bc4b578faf425471: object corrupt or missing: .git/objects/ad/7ceee5b187af409cbd2219bc4b578faf425471
error: corrupt loose object 'fdacf1b391398e4548fa3a9f09b0f6714881907c'
error: unable to unpack contents of .git/objects/fd/acf1b391398e4548fa3a9f09b0f6714881907c
error: fdacf1b391398e4548fa3a9f09b0f6714881907c: object corrupt or missing: .git/objects/fd/acf1b391398e4548fa3a9f09b0f6714881907c
Checking object directories: 100% (256/256), done.
Checking objects: 100% (27396/27396), done.
missing blob 60e0633917e44a958f890039cff7297f99d8e8eb
dangling commit d885e9e214a1f84ce5feb8fdcdf51a27249e689e
dangling commit a38bc134bc0ec9741e7abbfa8ee200a0c82253d6
missing blob fdacf1b391398e4548fa3a9f09b0f6714881907c
missing blob 5b4e2ac94c33715545674545e501a705ea20924b
missing blob 25726bffc0e97532098679d0ed04095710452d29
missing blob f2f68aa9deda03f256574d468395e840144d9d05
missing blob ad7ceee5b187af409cbd2219bc4b578faf425471
i got a lot of recommendations with exotic options but ultimately the fix was this
git reset <last good remote commit> # NOT hard!
git stash # to store stuff that has been changed since last good remote commit
git fetch origin # pull down everything since last commit
git stash pop # put back the new stuff
git add . && git commit -m "add back new stuff" # new stuff
git push origin main # done!
icloud artefacts
# remove all files in .git with a space and then a number in their name, likely duplicates created by icloud
find .git -type f -name '* [0-9]*' -delete