I randomly hit this today while trying to run Git garbage collect:
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
How do I deal with this?
I randomly hit this today while trying to run Git garbage collect:
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
How do I deal with this?
I don't understand the ramifications of this, but as suggested in this thread, when I encountered this I just did
$ mv .git/refs/remotes/origin/HEAD /tmp
(keeping it around just in case) and then
$ git gc
worked without complaining; I haven't run into any problems.
After seeing Trenton’s answer, I looked at my .git/refs/remotes/origin/HEAD
and saw that it was also pointing to an old branch that is now deleted.
But instead of editing the file myself, I tried Ryan’s solution:
git remote set-head origin --auto
It automatically set the file to the new branch, and git gc
worked fine after that.
The problem that I ran into (which is the same problem that @Stavarengo mentioned in this comment above) is that the default remote branch (develop
in my case) had been deleted, but was still referenced in .git/refs/remotes/origin/HEAD
.
Opening .git/refs/remotes/origin/HEAD
in my editor showed this:
ref: refs/remotes/origin/develop
I carefully edited it to point at my new default branch and all was well:
ref: refs/remotes/origin/master
The clue that tipped me off was that running git prune
showed this error:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Thank god I found this https://makandracards.com/chris-4/54101-fixing-a-git-repo
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
This may happen if upstream branches have been removed and your origin is pointing to it. You can confirm this by running:
cat .git/refs/remotes/origin/HEAD
If it is pointing to a branch that doesn't exist, running:
git remote set-head origin --auto
followed by
git gc
will fix it
Looks like your symbolic-refs might be broken... Try the replacing it with your default branch like this: For example, my default branch is master
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
That should fix it.
git update-ref -d [wrong reference here]
This will fix this issue.
For above issue use following code:
git update-ref -d 'refs/remotes/origin/HEAD'
In case you are getting error with .git like below:
error: bad ref for .git/logs/refs/remotes/origin/Dec/session-dynatrace-logs 6
You can copy the path starting from refs like below:
git update-ref -d 'refs/remotes/origin/Dec/session-dynatrace-logs 6'
I hit this error because the default branch was changed from master
to main
.
I used a mix of info given by a few of the answers above to resolve it:
cat .git/refs/remotes/origin/HEAD
Returned:
ref: refs/remotes/origin/master
To fix it, I ran:
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
I ran this again to double-check:
cat .git/refs/remotes/origin/HEAD
Which returned:
ref: refs/remotes/origin/main
Then git gc
and git prune
worked just fine.
To see what happens I also tried:
git remote set-head origin --auto
Which returned:
origin/HEAD set to main
And it really solves the problem by identifying the ref automatically.
rm .git/refs/remotes/origin/HEAD
git gc
The above solution partially worked for me because my folder had the "desktop.ini" files everywhere in the repository as it is hosted on Google Drive, including the “.git” folders where Git was storing its own data. Git expected every file in that folder to contain Git data, not Google Drive data, and it choked trying to interpret the desktop.ini file contents.
To avoid this, make sure to include desktop.ini
in .gitignore
I first deleted these files using a batch command on windows as follows:
create a "delete.bat" file in the repository and add the following code to it
del /s /q /f /a ".\desktop.ini"
Open cmd
and open the current folder
run delete.bat
by simply calling it in cmd
Now you should be able to run
git remote set-head origin --auto
followed by git gc
If someone is getting this error
fatal: bad object refs/stash 2
error: https://github.com/Username/repository.git did not send all necessary objects
this is how I fixed
mv .git/refs/stash\ 2 /tmp
git gc
If you're using git worktrees, make sure you're doing a
git worktree prune
before running
git gc
I had a worktree get corrupted and this seemed to do the trick after removing the corrupted worktree. git prune
by itself didn't seem to work.
The cause of this for me was working in a compressed folder in Windows. When the folder was uncompressed, it corrupted the pack files, cascading other odd issues, such as not being able to prune nonexistent branches.
The only fix was to wipe out the working directory and clone the repo remote(s) again. Luckily, I could still push and pull updates to ensure nothing was lost. All is well now.
My problem occurred with a specific branch.
Apparently the reference file for branch was corrupted. I fixed it like that.
git checkout main
// I removed the file .git\refs\heads\branch_xpto
git pull
git checkout branch_xpto
I ran into the same issue, when I tried to pull from the origin branch, I got the following error:
fatal: bad object refs/remotes/origin/account
The solutions above didn't work for me for some reason. Kept getting this error
mv: cannot stat '.git/refs/remotes/origin/HEAD': No such file or directory
And running git gc
gave this error:
error: bad ref for .git/logs/refs/remotes/origin/account
fatal: bad object refs/remotes/origin/account
fatal: failed to run repack
In my situation, the remote branch was pointing to a branch that didn't exist.
What fixed it for me was deleting the branch
git branch -D account
and also deleting it from .git/refs/remotes/origin/account
Everything working perfectly.
What worked for me was to get into the folder itself in my pc cause I kept getting the error
No such file or directory
whenever I run
mv .git/refs/remotes/origin/HEAD /tmp
$ git gc git prune
After opening the hidden files, you can do this by pressing cmd + shift + . on Mac or Windows then ref > remote > origin and delete the unnecessary files
In my I just deleted that particular refs
: refs/heads/feat/implement-games
. After that, I was already able to git pull origin master
I am not really sure how this occurs, but it seems that its being caused due to duplicates.
What worked for me was manually deleting duplicates. I navigated to each of the folders and manually removed the duplicates.
I had the below issue bad object refs/tags/v1.0.1 2
Then try to git gc again. In my case, I had more duplicates in diff locations that I had to manually delete in the same manner, but once all were removed - everything work normally.
I hope this works for you!