Ćwiczenie — naprawianie błędów przy użyciu usługi Git

Ukończone

Teraz zajmijmy się praktycznymi praktykami naprawiania naszych błędów!

Ćwiczenie odzyskiwania usuniętego pliku

  1. Najpierw spróbuj usunąć plik index.html:

    rm index.html
    

    To może wydawać się zły pomysł, ale pamiętaj: Git ma plecy!

  2. Przy użyciu polecenia ls sprawdź, czy plik index.html został usunięty:

    ls
    
  3. Powinny zostać wyświetlone następujące dane wyjściowe. Pamiętaj, że teraz nie ma pliku index.html !

    CSS
    
  4. Odzyskajmy plik index.html. Użyj git checkout polecenia , aby przywrócić plik index.html:

    git checkout -- index.html
    
  5. 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.

  1. Aby zobaczyć, co się stanie, spróbuj wykonać następujące polecenie:

    git rm index.html
    
  2. Ponownie poszukaj pliku index.html , uruchamiając polecenie ls. Nie powinien być widoczny plik index.html.

  3. Spróbuj odzyskać plik index.html w taki sam sposób, jak ostatnio:

    git checkout -- index.html
    
  4. 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.
    
  5. Cofnij przygotowanie usunięcia pliku index.html za pomocą polecenia git reset:

    git reset HEAD index.html
    
  6. Sprawdź, czy są wyświetlane następujące dane wyjściowe:

    Unstaged changes after reset:
    D       index.html
    
  7. 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ć polecenia checkout, aby go odzyskać.

  8. 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.

  1. Otwórz plik index.html za pomocą polecenia code:

    code index.html
    
  2. Zastąp zawartość pliku index.html następującym kodem:

    <h1>That was a mistake!</h1>
    
  3. Zapisz i zamknij plik.

  4. 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.

  5. Użyj następujących poleceń, aby spróbować przywrócić plik index.html:

    git checkout -- index.html
    
  6. 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.

  7. 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.

  8. 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(-)
    
  9. Następnie uruchom polecenie git log, aby wyświetlić najnowsze zatwierdzenie:

    git log -n1
    
  10. 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.
    
  11. 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.