Purging file from Git repo failed, unable to create new backup
Asked Answered
C

4

151

I tried to remove a file from my remote repo by running:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

But Git complains that

Cannot create new backup. A previous backup already exists in refs/original/
Force overwriting the backup with -f
rm: cannot remove /.git-rewrite/backup-refs : Permission denied
rm: cannot remove directory /.git-rewrite : Directory not empty

This was after I already deleted the .git-rewrite directory on Windows.

How can I remove that file? It's a 29Mb file sitting on my repo, so I quite need to remove the file.

I tried to delete the commit in git rebase -i, but apparently because the commit touched a lot of different files, Git complains of conflicts and I aborted to be safe.

Cosec answered 19/6, 2011 at 16:24 Comment(1)
For search engines: this may also apply when your error message is .git-rewrite already exists, please remove it.Populous
R
277

You have already performed a filter-branch operation. After filter-branch, Git keeps refs to the old commits around, in case something goes wrong.

You can find those in .git/refs/original/…. Either delete that directory and all files within, or use the -f flag to force Git to delete the old references.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Regeneration answered 19/6, 2011 at 18:37 Comment(13)
Finally got it to work, thanks! I did try the -f flag, but the problem was I was putting it at the end of the command eg. HEAD -f. Seeing your command made me try putting the flag at the start, and it worked! =DCosec
option flags (-f) go before the refs (HEAD). refs go lastRegeneration
I'm still getting the same error after adding -f AND deleting the directory. Any ideas?Introrse
@Yaron: which error? git add doesn't show up in my answer.Regeneration
@knittl, i wasn't referring to git add. I was receiving the same error as the original poster even after deleting the .git/refs/original/ folder and using the -f flag in the git filter-branch command. The solution, in my case, was to delete the .git/packed-refs file.Introrse
@Yaron: packed-refs contains all references. You might have deleted a lot of important references.Regeneration
I am getting this same problem with permissions, even I did the filter-branch for the first time! Any ideas? Repository was actually copied (fetched) from the remote repository.Chishima
@Gabrielius: are the file and directory permissions in your repository correct? Can you write to your disk, is still disk space available? Also make sure the .git-rewrite directory does not exist.Regeneration
@knittl, I found how to fix it, but did not find what the problem was. Basically, I added --ignore-unmatch to command git rm and it went smoothly!Chishima
@Gabrielius: that's already contained in my answer since 2012? :)Regeneration
@knittl, yeah funny. The problem started when I removed --ignore-unmatch because with it nothing was deleted, but then this permissions error appeared. I then re-added the parameter, but used it with a different path this time. Thus the real issue was the wrong path :)Chishima
Deleting .git/refs/original/ did not solve my issue. I restored the folder, then used this answer to remove the backup.Tachygraphy
For file path with space in the name use this: git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch 'large file.pdf'" HEADJezreel
V
33

Use this command to remove original backup:

git update-ref -d refs/original/refs/heads/master

Here is gist I used to filter-branch my git repo: https://gist.github.com/k06a/25a0214c98bc19fd6817

Viable answered 9/12, 2015 at 11:19 Comment(3)
This is the right solution to remove the backup! Deleting .git/refs/original/ does not solve the problem.Tachygraphy
Be sure to change 'master' to the branch you are attempting to fix.. in my case 'develop'Parlin
git show-ref | awk '/ refs.original.refs/{print$2}' to find all the backups your repo has.Contrayerva
I
5

I had the same problem and the answer above didn't fix it. There was no .git/refs/original/ directory left. The solution for me was to delete the .git/packed-refs file.

Introrse answered 23/4, 2015 at 23:39 Comment(3)
Same problem. No .git/packed-refs file, however, and no folder original in .git/refs. Anyone?Enmesh
Resolved here by adding the -r flag to command.Enmesh
Same problem here. Deleting packed-refs solved the problem, but it also ruined the rest of my git directory, and I had to restore from backup.Phenylalanine
I
2

Add a force to the filter branch command.

Iinden answered 19/6, 2011 at 18:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.