Reputation: 2543
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?
Upvotes: 10
Views: 5258
Reputation: 9128
As described here, simply use
git reflog expire --expire-unreachable=now --all
git gc --prune=now
git reflog expire --expire-unreachable=now --all
removes all references of unreachable commits in reflog
.
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.
Upvotes: 20
Reputation: 6123
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.
Upvotes: 5