2010-04-28 10 views
10

Przeczytałem, że Git głównie dodaje informacje o historii repozytorium, starając się zapamiętać każdą wprowadzoną zmianę, ale są też polecenia, które powodują nieodwracalne zmiany.Jakie są niszczycielskie polecenia w git?

Na jakie polecenia powinienem zwrócić uwagę i nie używać ich niewłaściwie, ponieważ nie ma odwrotu?

+0

Kiedy odpowiesz na poniższe pytanie, pamiętaj, aby wyjaśnić, co robi polecenie! –

Odpowiedz

9

Są tu dwa rodzaje "destrukcyjnych" - poleceń destrukcyjnych dla historii git i poleceń, które odrzucają zmiany w kopii roboczej.

Polecenia wyrzucić drzewo praca zmienia:

  1. git reset
  2. git checkout

Jak wspominają inni, kombinacja reflog oraz fakt, że obiekty git nie od razu zostanie odrzucony (chyba że włączysz automatyczne czyszczenie) oznacza, że ​​zazwyczaj można cofnąć operacje takie jak git reset/rebase/merge.

te polecenia, choć faktycznie odrzutów git obiektów, eliminując możliwość cofania:

  1. git gc (domyślnie to śliwki niedostępnych obiektów, które są co najmniej 2 tygodni)
+1

Moim zdaniem najbardziej destrukcyjne polecenia git zmieniają te, które odrzucają drzewo robocze. Zawsze powinno być bezpiecznie "robić kopię zapasową" za pomocą "git stash; git schowaj pop ". Możesz później (aż do limitu gn prune) odzyskać "utracone" wersje za pomocą polecenia, takie jak: gitk --all -n 5000 --all $ (git fsck | awk '/ dangling commit/{print $ 3}', git log -g --pretty = 'format:% H') [to otworzy frontend gitk z maksymalnie 5000 commitami, włączając wszystkie "stracone" zatwierdzenia]. –

2

git zresetować --hard nie można cofnąć

+0

prawda, kiedy się nie zgadza – Lauri

7

Według http://blog.reverberate.org/2009/07/30/gits-needs-a-new-interface/

$ git checkout foo.c 

... zastąpi żadnych lokalnych modyfikacji może trzeba foo.c bez pytania.

+1

Całkiem prawdziwa - jest jeszcze bardziej niszczycielska, niż myślałem. Właśnie zrobiłem "git checkout 6bb33a8.", Mając nadzieję, że uda mi się uzyskać plik, który został zmieniony w tym zatwierdzeniu, ale także usunęło moje zmiany etapowe do innych plików, zastępując je zawartością tego zatwierdzenia. Pomyślałem, że może wsadzić coś do refloga, żeby mnie chronić, ale nie ma szczęścia. –

3

Możesz stracić niezatwierdzone zmiany, używając polecenia git reset. Jeśli twoje zmiany zostały zatwierdzone, jesteś chroniony przez reflog przez kilka dni, zanim zostanie oczyszczony przez gc.

Na przykład, jeśli checkout, rebase, reset lub merge które wprowadzają zmiany, można wrócić do poprzedniego popełnienia przez uruchomienie komendy reflog i korzystania reset zresetować swoją głowę do starej popełnić.