Remove file from git repository (history)

Remove file from git repository history

can’t say for sure without access to your repository data, but I believe there are probably one or more packed refs still referencing old commits from before you ran git filter-branch. This would explain why git fsck --full --unreachable doesn’t call the large blob an unreachable object, even though you’ve expired your reflog and removed the original unpacked refs.

Here’s what I’d do after git filter\-branch and git gc have been done:

1) Make sure original refs are gone:

rm -rf .git/refs/original

2) Expire all reflog entries:

git reflog expire --all --expire=‘0 days’

3) Check for old packed refs

This could potentially be tricky, depending on how many packed refs you have. I don’t know of any Git commands that automate this, so I think you’ll have to do this manually. Make a backup of .git/packed-refs. Now edit .git/packed-refs. Check for old refs in particular, see if it packed any of the refs from .git/refs/original. If you find any old ones that don’t need to be there, delete them remove the line for that ref.

After you finish cleaning up the packed-refs file, see if git fsck notices the unreachable objects:

git fsck --full --unreachable

If that worked, and git fsck now reports your large blob as unreachable, you can move on to the next step.

4) Repack your packed archives

git repack -A -d

This will ensure that the unreachable objects get unpacked and stay unpacked.

5) Prune loose unreachable objects

git prune

And that should do it. Git really should have a better way to manage packed refs. Maybe there is a better way that I don’t know about. In the absence of a better way, manual editing of the packed-refs file might be the only way to go.