Dzisiaj bardzo mała ale bardzo przydatna rzecz – cofanie zmian w git. Myślę że jest to rzecz którą powinien się nauczyć każdy użytkownik git’a zaraz po zatwierdzaniu zmian i umieszczaniu ich na serwerze.
Przy męczącej pracy bez kawy albo przez zwykłą pomyłkę może się nam zdarzyć zatwierdzenie zmian z których nie jesteśmy zadowoleni. Może to być poważny błąd w kodzie, którego nie chcielibyśmy w naszym repozytorium albo zatwierdzenie zmiany, która docelowo miała się znaleźć w innej gałęzi. Są na to dwa rozwiązania warte zapamiętania. Pierwsze bardziej uniwersalne, drugie nadające się do przypadku z pomyłką gałęzi.
Rozwiązanie
Cofanie się o krok w tył
Operacja reset służy nam do cofnięcia naszego głównego wskaźnika do wybranego przez nas miejsca. Poza tym możemy wybrać jeden z kilku dostępnych trybów. Ja się skupię na dwóch.
git reset --hard HEAD^ - używamy kiedy nie chcemy odzyskać zmodyfikowanych plików przed zatwierdzeniem. Stosujemy w przypadku kiedy napisaliśmy bardzo dużo bzdur i chcemy zacząć od nowa.
git reset --soft HEAD^ - miękkie cofanie zmian w tym przypadku oznacza zatrzymanie zmian i pozwolenie na ich poprawienie oraz późniejsze zatwierdzenie do repozytorium.
Po tych operacjach wystarczy poprawić kod, upewnić się że jesteśmy na właściwej gałęzi i jeszcze raz zatwierdzić git commit.
Przeniesienie ostatniej zmiany do nowej gałęzi
Ten sposób jest trochę bardziej zawiły i składa się z kilku kroków:
- git branch nazwa – na początku tworzymy nową gałąź, w tej chwili mamy identyczną historię jak gałąź główna,
- git checkout dev – w tym momencie cofamy się do naszej głównej gałęzi na której pracujemy (tutaj jest to 'dev’)
- git reset –hard HEAD^ – cofamy nasze zatwierdzenia na gałęzi głównej.
Oba sposoby są tak na prawdę wykorzystaniem tej samej operacji. Natomiast pokazują one jak wykorzystać operację w zupełnie inny sposób.
Komentarze
3 odpowiedzi na “Git – cofanie ostatniej zmiany (commit’a)”
A co zrobic, jak poszedl commit na zdalna galaz i chcialabym go i wszystke zmiany skasowac?
Nie można.
Zacommitowane zmiany mogą już zostać pobrane przez inne osoby pracujące nad tematem.
Chyba ze w błędzie jestem.
Można, tylko nie jest to bezpieczne z tego powodu, o którym pisałeś.
Najpierw sprawdzamy sobie dokładnie ostatnie commity, żeby wiedzieć ile już wypuszczonych checemy cofnąć:
git log -6
Potem cofamy podając ilość commitów do cofnięcia (tutaj dwa):
git reset –soft HEAD~2
Potem lokalnie robimy sobie commita nowego i musimy go później wypushować z forcem, co nadpisze zmiany w repo zdalnym.
Przydatne, jak pracuje się samemu, albo na własnej gałęzi – masz wtedy pewność, że nikt inny nie ściągnął sobie Twoich zmian i na nich nie pracuje.