Git – cofanie ostatniej zmiany (commit’a)

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:

  1. git branch nazwa – na początku tworzymy nową gałąź, w tej chwili mamy identyczną historię jak gałąź główna,
  2. git checkout dev – w tym momencie cofamy się do naszej głównej gałęzi na której pracujemy (tutaj jest to ‚dev’)
  3. 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.