Use the -D switch to delete it irrespective of its merged status. to delete the ref.
In Git, a head is a ref that points to the tip (latest commit) of a branch. You can view your repository's heads in the path . git/refs/heads/ . In this path you will find one file for each branch, and the content in each file will be the commit ID of the tip (most recent commit) of that branch.
A ref is an indirect way of referring to a commit. You can think of it as a user-friendly alias for a commit hash. This is Git's internal mechanism of representing branches and tags. Refs are stored as normal text files in the .git/refs directory, where .git is usually called .git .
refs/original/*
is there as a backup, in case you mess up your filter-branch. Believe me, it's a really good idea.
Once you've inspected the results, and you're very confident that you have what you want, you can remove the backed up ref:
git update-ref -d refs/original/refs/heads/master
or if you did this to many refs, and you want to wipe it all out:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
(That's taken directly from the filter-branch manpage.)
This doesn't apply to you, but to others who may find this: If you do a filter-branch which removes content taking up significant disk space, you might also want to run git reflog expire --expire=now --all
and git gc --prune=now
to expire your reflogs and delete the now-unused objects. (Warning: completely, totally irreversible. Be very sure before you do it.)
And if you're in Windows PowerShell:
git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ }
filter-branch
keeps backups so repository need to clean up reflogs and garbage collect. Make sure that have no need in this backups before deletion:
rm -Rf .git/refs/original
git gc --aggressive --prune=now
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With