2012-12-11 24 views
5

Ho un git commit storia come questa:rimuovere un referenziata commit dalla repository git

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

punti nulla alla impegnarsi U, ma so che il suo hash. Come posso rimuovere completamente questo commit dal mio repository come se non fosse mai esistito? Sono l'unica persona che usa questo repository.

Ho provato a utilizzare git rebase, ma ciò può eliminare parti di un ramo o spostare commits, ma non sembra essere in grado di eliminare un singolo commit.

Se faccio git checkout <hash> e quindi git reset --hard HEAD~1 non vedo più il commit. In realtà è andato completamente o è ancora nascosto nel repository?

risposta

2

Eventualmente verrà ripulito da git, ma è possibile esaminare git gc per forzare effettivamente un garbage collector.

Il comando clean è diverso e non si prenderà cura di questo per voi.

+0

Cosa succede se ho clonato l'intero pronti contro termine? Anche gli oggetti inutili non referenziati possono essere clonati? – Jawap

+0

@Jawap: no, non saranno clonati – Chronial

4

Come descritto here, è sufficiente utilizzare

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

git reflog expire --expire-unreachable=now --all rimuove tutti i riferimenti di commit irraggiungibili in reflog.

git gc --prune=now rimuove gli stessi commit.

Attenzione: L'utilizzo di git gc --prune=now non funziona poiché tali commit sono ancora referenziati nel reflog. Pertanto, la cancellazione del reflog è obbligatoria.

Problemi correlati