Prawie zawsze możesz wyjść z tego obronną ręką.
Wszyscy to kiedyś zrobiliśmy (żeby raz…) — usunęliśmy plik, którego nie powinniśmy usuwać, scaliliśmy rzeczy, które nie powinny znajdować się w głównej gałęzi, przypadkowo wyrzuciliśmy poufne informacje z pliku konfiguracyjnego, daliśmy commit do niewłaściwej gałęzi…
Git jest naprawdę fajny gdy wszystko idzie zgodnie z planem — ale trochę trudniej jest programistom pałać do niego sympatią gdy trzeba cofnąć popełniony błąd. Po części dlatego, że GIT to tylko i aż kontrola wersji. Chodzi o to, że nie powinno się wprowadzać zmian w przeszłości, po zatwierdzeniu zmiany. Ale zawsze można coś na to poradzić i o tym jest ten wpis.
Odrzuć wszystkie lokalne zmiany w określonym pliku
Zapisałeś coś, ale przypadkowo uwzględniłeś również zmiany w pliku, którego nie chcesz dołączyć. Co robisz? Użyj następującego polecenia: git checkout HEAD targetfilename.js
.
Jak przywrócić usunięty plik w Git
Usunąłeś plik w Git, ale chcesz go odzyskać. Oto jak to robisz: git checkout HEAD accidentallydeletedfilename.js
Jak odrzucić linie w pliku?
Są części kodu, które chcesz zachować ale inne części chcesz odrzucić. Jedno jest pewne — nie chcesz przywracać całego pliku do pierwotnego stanu. Możesz do tego użyć łatki. Oto jak możesz to zrobić: git checkout -p index.js
, gdzie -p
oznacza łatę. Możesz także wykonać to z użyciem —patch
zamiast -p
. To polecenie przeniesie nas w tryb interaktywny, w którym Git sprawdzi każdy fragment zmian, które zaszły w pliku. Możesz wybrać, który blok zmian chcesz zachować lub odrzucić. Możesz odrzucić zmianę, wpisując y
lub zaakceptować ją wciskając n
.
Odrzucenie wszystkich lokalnych zmian
Po prostu chcesz mieć czysty start w obecnej gałęzi, w której się znajdujesz. No to użyj następującego polecenia aby to osiągnąć: git reset --hard HEAD
.
Jak cofnąć zatwierdzenie
Chcesz cofnąć commit bez usuwania zmian jakie się w międzyczasie zdarzyły. Załóżmy, że mamy takie commity: C1 --> C2 --> C3
. W tym przykładzie masz więc trzy różne commity. Chcesz cofnąć zmianę dokonaną w C2 bez usuwania C3. Najpierw użyj git log
, aby wyświetlić poprzednie zmiany. To da ci git hash. Użyj tego git hasha jako punktu odniesienia, do którego commita chcesz cofnąć zmiany: git revert 9130cf1
. Git utworzy teraz nowy commit, które cofnie zmiany wprowadzone przez ten konkretny commit.
Jak zrobić roll back i reset do starszego commita
Załóżmy, że zrobiłeś coś, czego nie powinieneś, a teraz chcesz przywrócić swój git commit do starszej wersji. Oznacza to, że ustawiamy nasz wskaźnik na poprzedni commit. Oznacza to również, że wszelkie commity, które pojawią się później, znikną — tak jakby nigdy się nie pojawiły w naszej historii zatwierdzeń.
Aby to zrobić, przejdź do swojego git log
i pobierz hash commita, do którego chcesz „się” zresetować. Następnie: git reset --hard 13928jj3ef
i oczywiście git commit
. Flaga —hard
zapewnia, że po tej akcji żadne lokalne zmiany nie zostaną zachowane i pozostaniemy tylko z plikami, które zostały zapisane w danym momencie.
Jak odzyskać usunięte commity
Zrobiłeś reset i straciłeś kilka commitów, za którymi usilnie tęsknisz... Istnieje narzędzie o nazwie reflog
— śledzi wszystko, co się dzieje, w tym usunięcia. Śledzi takie rzeczy, jak checkouty, commity, cherry-picks czy właśnie resety. Reflog wylistuje nam te działania w porządku chronologicznym. No to teraz cofamy usunięcie, np. tak: git reset --hard 01428ej2ee
.