Mam projekt, w którym uruchomiłem git init
.
Po kilku commitach, zrobiłem git status
, który powiedział mi, że wszystko jest aktualne i nie ma żadnych lokalnych zmian.
Następnie dokonałem kilku kolejnych zmian i zdałem sobie sprawę, że chcę wszystko wyrzucić i wrócić do pierwotnego stanu. Czy ta komenda zrobi to za mnie?
git reset --hard HEAD
Jeśli chcesz przywrócić zmiany wprowadzone w kopii roboczej, wykonaj tę czynność:
git checkout .
Jeśli chcesz odwrócić zmiany dokonane w indeksie (tzn. dodane przez ciebie), zrób to. Ostrzeżenie: spowoduje to zresetowanie wszystkich twoich nieopublikowanych commitów do wersji master!:
git reset
Jeśli chcesz odwrócić zmiany, które popełniłeś, zrób to:
git revert <commit 1> <commit 2>
Jeśli chcesz usunąć nieśledzone pliki (np. nowe pliki, wygenerowane pliki):
git clean -f
Lub nieśledzone katalogi (np. nowe lub automatycznie wygenerowane katalogi):
git clean -fd
Uwaga: Możesz również uruchomić
git clean -fd
jako
git reset --hard
nie usunie nieśledzonych plików, gdzie git-clean usunie wszystkie pliki ze śledzonego katalogu głównego, które nie są śledzone przez git. OSTRZEŻENIE - BĄDŹ Z TYM OSTROŻNY! Pomocne jest, aby najpierw uruchomić suchy przebieg z git-clean, aby zobaczyć, co usunie.
Jest to również szczególnie przydatne, gdy otrzymasz komunikat o błędzie
~"performing this command will cause an un-tracked file to be overwritten"
Który może wystąpić podczas robienia kilku rzeczy, jedną z nich jest aktualizacja kopii roboczej, gdy ty i twój przyjaciel dodaliście nowy plik o tej samej nazwie, ale on'popełnił go do kontroli źródła jako pierwszy, a ty nie dbasz o usunięcie swojej niezaufanej kopii.
W tej sytuacji, wykonanie uruchomienia na sucho pomoże również pokazać listę plików, które zostałyby nadpisane.
Zajrzyj do git-reflog. Wyświetli on listę wszystkich stanów, które pamięta (domyślnie 30 dni), a ty możesz po prostu sprawdzić ten, który chcesz. Na przykład:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d