2012-12-11 8 views
5

begehen habe ich ein git Geschichte wie diese begehen:entfernen ein unreferenced von Git Repository

  U 
     /
A---B---C---D---E master 

Nichts weist auf die U begehen, aber ich kenne seine Hash. Wie kann ich dieses Commit vollständig aus meinem Repository entfernen, als ob es nie existiert hätte? Ich bin die einzige Person, die dieses Repo nutzt.

Ich habe versucht mit git rebase, aber das kann entweder Teile eines Zweigs oder verschieben commits löschen, scheint aber nicht in der Lage zu sein, ein einzelnes Commit zu löschen. Wenn ich git checkout <hash> und dann git reset --hard HEAD~1 mache, sehe ich das Commit nicht mehr. Ist es tatsächlich komplett verschwunden oder ist es noch im Repo versteckt?

Antwort

2

Schließlich wird es von Git aufgeräumt, aber Sie können in git gc suchen, um tatsächlich eine Müllsammlung zu erzwingen.

Der clean Befehl ist anders und wird nicht von dieser für Sie kümmern.

+0

Was ist, wenn ich das ganze Repo geklont habe? Werden nicht referenzierte Müllobjekte auch geklont? – Jawap

+0

@Jawap: Nein, sie werden nicht geklont – Chronial

4

Wie beschrieben here, verwenden Sie einfach

git reflog expire --expire-unreachable=now --all 
git gc --prune=now 

git reflog expire --expire-unreachable=now --all alle Verweise von unerreichbaren Commits in reflog entfernt.

git gc --prune=now entfernt die Commits selbst.

Achtung: Nur die Verwendung von git gc --prune=now funktioniert nicht, da diese Commits im Reflog noch referenziert werden. Daher ist das Löschen des Reflogs obligatorisch.

Verwandte Themen