Ćwiczenie — naprawianie błędów przy użyciu usługi Git
Teraz zajmijmy się praktycznymi praktykami naprawiania naszych błędów!
Ćwiczenie odzyskiwania usuniętego pliku
Najpierw spróbuj usunąć plik index.html:
rm index.html
To może wydawać się zły pomysł, ale pamiętaj: Git ma plecy!
Przy użyciu polecenia
ls
sprawdź, czy plik index.html został usunięty:ls
Powinny zostać wyświetlone następujące dane wyjściowe. Pamiętaj, że teraz nie ma pliku index.html !
CSS
Odzyskajmy plik index.html. Użyj
git checkout
polecenia , aby przywrócić plik index.html:git checkout -- index.html
Ponownie użyj polecenia
ls
, aby sprawdzić zawartość bieżącego katalogu. Czy plik index.html został przywrócony?Tak! Teraz dane wyjściowe powinny mieć plik index.html i katalog CSS :
CSS index.html
Przećwicz odzyskiwanie usuniętego pliku: git rm
Jeśli chcesz odzyskać usunięte pliki, elementy są nieco bardziej skomplikowane, jeśli usuniesz je przy użyciu git rm
zamiast przy użyciu polecenia rm
.
Aby zobaczyć, co się stanie, spróbuj wykonać następujące polecenie:
git rm index.html
Ponownie poszukaj pliku index.html , uruchamiając polecenie
ls
. Nie powinien być widoczny plik index.html.Spróbuj odzyskać plik index.html w taki sam sposób, jak ostatnio:
git checkout -- index.html
Tym razem usługa Git zgłasza, że nie ma żadnych informacji o pliku index.html. Dzieje się tak dlatego, że usługa Git nie tylko usunęła plik, zarejestrowała usunięcie w indeksie:
error: pathspec 'index.html' did not match any file(s) known to git.
Cofnij przygotowanie usunięcia pliku index.html za pomocą polecenia
git reset
:git reset HEAD index.html
Sprawdź, czy są wyświetlane następujące dane wyjściowe:
Unstaged changes after reset: D index.html
Teraz możesz odzyskać plik z indeksu za pomocą polecenia użytego wcześniej:
git checkout -- index.html
Polecenie
git reset
cofnęło przygotowanie zmiany, ale plik był wciąż usunięty, dlatego trzeba było użyć poleceniacheckout
, aby go odzyskać.Sprawdź dokładnie, czy działa, uruchamiając polecenie
ls
.
Cofanie zatwierdzenia
Teraz zróbmy rzeczy bardziej skomplikowane. Załóżmy, że przypadkowo zastąpisz jeden plik innym plikiem lub wprowadzisz zmianę w pliku, który wydaje się być dużym błędem. Chcesz przywrócić poprzednią wersję pliku, ale zmiany zostały już zatwierdzone. W tym przypadku prosty git checkout
nie zrobi sztuczki.
Jednym z rozwiązań tego problemu jest przywrócenie poprzedniego zatwierdzenia.
Otwórz plik index.html za pomocą polecenia
code
:code index.html
Zastąp zawartość pliku index.html następującym kodem:
<h1>That was a mistake!</h1>
Zapisz i zamknij plik.
Użyj tych poleceń, aby zatwierdzić zmiany i wyświetlić najnowsze zatwierdzenie:
git commit -m "Purposely overwrite the contents of index.html" index.html git log -n1
Flaga
-n1
w tym miejscu informuje usługę Git, że chcemy tylko najnowszego wpisu zatwierdzenia.Użyj następujących poleceń, aby spróbować przywrócić plik index.html:
git checkout -- index.html
Otwórz plik index.html w edytorze:
code index.html
Którą wersję pliku index.html widzisz? Stara wersja lub nowa wersja?
W takiej sytuacji najlepszym rozwiązaniem jest przywrócenie zmiany przez utworzenie innego zatwierdzenia, które anuluje pierwsze. To jest zadanie dla polecenia
git revert
.Zamknij plik i użyj polecenia
git revert
, aby cofnąć zatwierdzone zmiany:git revert --no-edit HEAD
Flaga
--no-edit
informuje usługę Git, że nie chcemy dodawać komunikatu zatwierdzenia dla tej akcji.Sprawdź dane wyjściowe. Powinien on wyglądać podobnie do tego przykładu:
[main 6a27310] Revert "Purposely overwrite the contents of index.html" 1 file changed, 13 insertions(+), 1 deletion(-)
Następnie uruchom polecenie
git log
, aby wyświetlić najnowsze zatwierdzenie:git log -n1
Ponownie sprawdź dane wyjściowe. Powinien on wyglądać następująco:
Author: User Name <user-name@contoso.com> Date: Tue Nov 19 23:42:26 2019 +0000 Revert "Purposely overwrite the contents of index.html" This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
Na koniec otwórz plik index.html , aby upewnić się, że zawartość jest poprawną wersją.
Przywracanie nie jest jedynym sposobem rozwiązania tej sytuacji; Możesz po prostu edytować plik index.html i zatwierdzić poprawiony plik. Ta opcja jest trudniejsza, jeśli zatwierdzone zmiany były obszerne. W każdym razie git revert
jest to dobry sposób na sygnalizowanie intencji.