Muszę cofnąć lokalne zmiany dla wdrożeń. ( svn revert
Używałem tego w czasach starego szkoły SVN.)
I używam git reset --hard HEAD
do tego. (Również git fetch
i git merge origin/$branch --no-ff
do synchronizacji z odgałęzieniem upstream.)
Ale niektóre artykuły wskazują git checkout -f
na cofnięcie zmian.
Jakie są kluczowe różnice między tymi poleceniami. Który sposób jest zalecany?
Odpowiedzi:
Obaj mają dokładnie ten sam efekt. Polecam Ci wybrać takie rozwiązanie, które będzie dla Ciebie wygodniejsze.
Ale gdyby w tym konkretnym przypadku efekt był taki sam, przy różnych wartościach byłby zupełnie inny. Zasadniczo (jest więcej, zobacz powiązane tematy) z resetem przenosisz bieżącą gałąź i HEAD do określonego zatwierdzenia, ale przy kasie przesuwasz tylko HEAD. Więcej informacji znajduje się poniżej.
Zasoby:
Na ten sam temat:
źródło
Nie mam jeszcze przedstawiciela do komentowania innych odpowiedzi, chciałem tylko dodać, że natknąłem się na przypadek, w którym dwie komendy NIE dają tego samego efektu. Wpadłem w dziwny stan, więc jest to zdecydowanie skrajny przypadek. Oto, co się stało:
Byłem w gałęzi, wszystko czyste. Sprawdziłem wzorzec
git checkout master
i stwierdziłemgit status
, że w istniejących plikach nie zostały wprowadzone zmiany (tak, w kodzie, który właśnie wypisałem). Próbowałem schować, aby wrócić do czystego stanu, skrytka rzekomo ukończona, alegit status
nadal nie została zmieniona. Próbowałem teżgit reset --hard HEAD
. To również zgłosiło pomyślne ukończenie, ale status nie był inny. Nie mogłem przerwać tych dziwnych zmian.Jednak
git checkout -f
rozwiązałem ten problem. Udało mi się uciec z tego dziwnego stanu. Tak więc, przynajmniej w pewnym sensie, te dwie rzeczy nie są takie same.źródło