I have a git commit history like this:
U
/
A---B---C---D---E master
Nothing points to the commit U
, but I know its hash. How can I completely remove this commit from my repository as if it never existed? I'm the only person using this repo.
I tried using git rebase
, but that can either delete parts of a branch or move commits, but doesn't seem to be able to delete a single commit.
If I do git checkout <hash>
and then git reset --hard HEAD~1
I don't see the the commit anymore. Is it actually gone completely or is it still hidden in the repo?
Eventually it will be cleaned up by git, but you can look into git
gc
to actually force a garbage collect.The
clean
command is different and won't take care of this for you.As described here, simply use
git reflog expire --expire-unreachable=now --all
removes all references of unreachable commits inreflog
.git gc --prune=now
removes the commits themselves.Attention: Only using
git gc --prune=now
will not work since those commits are still referenced in the reflog. Therefore, clearing the reflog is mandatory.