Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove an unreferenced commit from git repository

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?

like image 320
Jawap Avatar asked Dec 11 '12 01:12

Jawap


1 Answers

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.

like image 120
leoly Avatar answered Sep 18 '22 12:09

leoly