Git fatal: Reference has invalid format: 'refs/heads/master
I am using Dropbox
to sync a git
repository, but now when I try and push
I am getting an error:
fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
So, it seems that Dropbox detected a conflict and created a copy. Ok, no problem, so I deleted the conflicted file. Still, getting the above git error though.
$ git checkout master
M index.html
Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
[master ff6f817] Cleanup repo
1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
The remote end hung up unexpectedly`
How can I fix this? Thanks.
Solution 1:
make a backup of your repo if you aren't sure about this one, because these commands are irreversible.
first, go to your repo directory.
cd myrepo
then recursively search for the conflicted files and delete them
find . -type f -name "* conflicted copy*" -exec rm -f {} \;
lastly, remove any "conflicted" references from git's packed-refs file
awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs
Solution 2:
The conflicted file could be in multiple places, I would look into:
.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/
Or you might look everywhere in the .git
subdirectory: find . -name '*conflicted*'
Or, otherwise, list the active branches with git branch -a
and delete (git branch -d
) anything suspicious.
Solution 3:
This also happen to our team when my colleague push his changes and shutdown the PC before Dropbox get updated.
I solved it so simply.
Just deleted the conflicted copy. (XXXX's conflicted copy yyyy-mm-dd)
And pull it normally.
Note that my colleague had the changes before messed up. And he push his changes again. This time no shutdown. :)
Solution 4:
I was able to delete all the conflicted files from my .git folder, but I continued to get errors about files that no longer existed.
The fix for me was opening up .git/refs/packed_refs
and deleting lines that contained the text "conflicted".