Git, jak przywrócić ostatnie zatwierdzenie?

Git, jak przywrócić ostatnie zatwierdzenie?
Git to skuteczne narzędzie, które śledzi Twój kod. Jedną z wspaniałych funkcji narzędzia jest to, że możesz łatwo sprawdzić swoją historię i wrócić, jeśli popełniłeś błąd. Stwórzmy sytuację, w której możesz powrócić do ostatniego zatwierdzenia i zobaczyć, jak działa polecenie Git Revert.

Zaczniemy od dodania kilku plików. W ostatnim zatwierdzeniu zamierzamy dodać i usunąć pliki, aby stworzyć niechlujną sytuację. Wtedy powrócimy do stanu przed chaosem.

Możesz utworzyć folder o nazwie /test i uruchomić następujące polecenia, aby zainicjować git i utworzyć opisaną powyżej sytuację (celowo wykonujemy osobne zobowiązania do stworzenia historii):

$ git init
Zainicjowane puste repozytorium Git/Users/Zakh_Eecs/_Work/Learngit/git_revert/test/.git/
$ echo x> file_1.tekst
$ git add -a
$ git commit -m "Dodawanie pliku_1.tekst"
[Master (root-commit) 08caf5d] Dodawanie pliku_1.tekst
1 Zmieniony plik, 1 wstawienie (+)
Utwórz tryb 100644 File_1.tekst
$ echo y> file_2.tekst
$ git add -a
$ git commit -m "Dodanie pliku_2.tekst"
[Master BA18A2F] Dodanie pliku_2.tekst
1 Zmieniony plik, 1 wstawienie (+)
Utwórz tryb 100644 File_2.tekst
$ echo z> file_3.tekst
$ git add -a
$ git commit -m "Dodawanie pliku_3.tekst"
[Master 97F09AD] Dodanie pliku_3.tekst
1 Zmieniony plik, 1 wstawienie (+)
Utwórz tryb 100644 File_3.tekst
$ echo u> file_4.tekst
$ git add -a
$ git commit -m "Dodawanie pliku_4.tekst"
[Master 9CAF084] Dodanie pliku_4.tekst
1 Zmieniony plik, 1 wstawienie (+)
Utwórz tryb 100644 File_4.tekst
$ echo v> file_5.tekst
$ git add -a
$ git commit -m "Dodawanie pliku_5.tekst"
[Master 3F228B2] Dodanie pliku_5.tekst
1 Zmieniony plik, 1 wstawienie (+)
Utwórz tryb 100644 File_5.tekst

Jeśli sprawdzimy nasz folder, powinniśmy zobaczyć następującą sytuację:

$ ls -1
file_1.tekst
file_2.tekst
file_3.tekst
file_4.tekst
file_5.tekst

Jeśli sprawdzimy historię, powinniśmy mieć następujące pliki:

$ git log -linia
3F228B2 Dodawanie pliku_5.tekst
9CAF084 Dodawanie pliku_4.tekst
97F09AD Dodawanie pliku_3.tekst
BA18A2F Dodawanie pliku_2.tekst
08CAF5D Dodawanie pliku_1.tekst

Teraz stwórzmy spustoszenie, zamierzamy usunąć kilka plików i dodamy zły plik.

$ rm file_2.tekst
$ rm File_4.tekst
$ echo w> my_bad_file.tekst
$ git add -a
$ git commit -m "Dodano i usunął pliki bez zastanowienia się nad konsekwencjami"
[Master 879FBF8] dodał i usunął pliki bez zastanowienia się nad konsekwencjami
3 pliki zmienione, 1 wstawienie (+), 2 delecje (-)
Usuń tryb 100644 File_2.tekst
Usuń tryb 100644 File_4.tekst
Utwórz tryb 100644 my_bad_file.tekst

To jest stan naszego folderu:

$ ls -1
file_1.tekst
file_3.tekst
file_5.tekst
my_bad_file.tekst

I to stan naszej historii:

$ git log -linia
879FBF8 Dodano i usunął pliki bez zastanowienia się nad konsekwencjami
3F228B2 Dodawanie pliku_5.tekst
9CAF084 Dodawanie pliku_4.tekst
97F09AD Dodawanie pliku_3.tekst
BA18A2F Dodawanie pliku_2.tekst
08CAF5D Dodawanie pliku_1.tekst

Zdajemy sobie sprawę, że nie chcemy ostatniego zatwierdzenia 879FBF8. Używamy więc następującego polecenia Revert:

$ git reverver 879fbf8

Otworzy okno tekstowe do edytowania automatycznego komentarza:

Powrót „Dodano i usunął pliki bez zastanowienia się nad konsekwencjami”
To powraca commit 879FBF849C4BD6FB9A377604D6355C76B92A832C.
# Wprowadź wiadomość o zatwierdzeniu dla swoich zmian. Linie zaczynają
# z „#” zostanie zignorowane, a pusta wiadomość przerywa zatwierdzenie.
# Na mistrzu oddziału
# Zmiany do popełnienia:
# Nowy plik: file_2.tekst
# Nowy plik: file_4.tekst
# usunięte: my_bad_file.tekst
#

Możesz zmodyfikować komentarz. Zachowamy to taką, jaka jest. Jak tylko zapiszesz okno komentarza, odbędzie się zadanie powrotu:

$ git reverver 879fbf8
[Master 6E80F0E] Wróć „Dodano i usunął pliki bez zastanowienia się nad konsekwencjami”
3 pliki zmienione, 2 wstawki (+), 1 usunięcie (-)
Utwórz tryb 100644 File_2.tekst
Utwórz tryb 100644 File_4.tekst
Usuń tryb 100644 my_bad_file.tekst

Spójrzmy teraz na nasz folder:

$ ls -1
file_1.tekst
file_2.tekst
file_3.tekst
file_4.tekst
file_5.tekst

Nasze pliki wróciły sekwencję, jak poprzednio. Wszystkie dodatki i usunięcia zostały przywrócone. Sprawdźmy dziennik:

$ git log -linia
6E80F0E Revert „Dodano i usunął pliki bez zastanowienia się nad konsekwencjami”
879FBF8 Dodano i usunął pliki bez zastanowienia się nad konsekwencjami
3F228B2 Dodawanie pliku_5.tekst
9CAF084 Dodawanie pliku_4.tekst
97F09AD Dodawanie pliku_3.tekst
BA18A2F Dodawanie pliku_2.tekst
08CAF5D Dodawanie pliku_1.tekst

Jest nowy zatwierdzenie 6E80F0E. Wszelkie zmiany, które były częścią 879FBF8 został cofnięty, a następnie zaangażowany 6E80F0E.

Ostrzeżenie: Git Reset Command pozwala również cofnąć się. Ale w przypadku resetowania (szczególnie twardego resetowania) usunęłoby to 879FBF8 zatwierdzić, jakby nigdy się nie stało i nie byłoby 6E80F0E popełniać. Z poleceniem powrotu każdy może zobaczyć zmiany, które miały miejsce. W przypadku resetowania nie pozostaje ślad. Zły jest złym pomysłem użycie polecenia resetowania w publicznym repozytorium, ponieważ może to powodować masowe zamieszanie. Złota zasada jest - nie używaj resetowania w repozytoriach publicznych, używaj powrotu, co jest bezpieczniejsze.

Podsumowując:

Komenda Git Revert to szybki i wygodny sposób na rozwiązanie błędów. To polecenie, które powinieneś pamiętać, jeśli regularnie pracujesz z git.

Dalsze badanie:

  • https: // git-scm.COM/DOCS/GIT-REVERT
  • https: // git-scm.COM/DOCS/GIT RESET
  • Git: Naucz się kontroli wersji z Git: A krok po kroku Przewodnik po Ultimate Beginners
  • Kontrola wersji z git: potężne narzędzia i techniki tworzenia oprogramowania do współpracy
  • Pro Git, druga edycja