W Git może wystąpić sytuacja, gdy trzeba cofnąć zmiany – czy to z powodu niezamierzonego commita, czy błędów w kodzie. Git oferuje dwa główne sposoby rozwiązania tych sytuacji: git revert i git reset. Chociaż na pierwszy rzut oka mogą wydawać się podobne, ich działanie jest zupełnie inne. W tym artykule przyjrzymy się ich różnicom oraz zastosowaniu w rzeczywistych scenariuszach.
Git revert to sposób na cofnięcie konkretnego commita bez utraty historii. Zamiast usuwać commit, tworzy nowy commit, który neguje zmiany poprzedniego commita.
Kiedy używać git revert?
Aby cofnąć ostatni commit, użyj:
git revert HEAD
Git utworzy nowy commit, który cofnie wszystkie zmiany z poprzedniego commita.
Aby cofnąć konkretny commit, znajdź jego hash za pomocą:
git log --oneline
Po tym uruchom:
git revert
Git reset pozwala usunąć commity z bieżącej gałęzi i wrócić do poprzedniego stanu. W przeciwieństwie do revertu nie zachowuje historii anulowanych zmian.
Kiedy używać git reset?
Soft reset (pozostawia zmiany w roboczym katalogu):
git reset --soft HEAD~1
Cofnie się o jeden commit, ale pozostawi wszystkie zmiany w staging area.
Mixed reset (pozostawia zmiany w roboczym katalogu, ale usuwa je ze staging area):
git reset --mixed HEAD~1
Hard reset (całkowicie usuwa ostatni commit i wszystkie zmiany w nim):
git reset --hard HEAD~1
Uwaga! Ten polecenie usunie wszystkie zmiany i nie będzie możliwe ich przywrócenie.
Funkcja | Git revert | Git reset |
---|---|---|
Zachowuje historię commitów? | Tak | Nie |
Odpowiednie dla zdalnego repozytorium? | Tak | Nie |
Usuwa istniejące commity? | Nie | Tak |
Możliwość przywrócenia po wykonaniu? | Tak | Nie (przy hard resecie) |
Jeśli już wysłałeś zmiany do zdalnego repozytorium, użyj git revert. Git reset jest odpowiedni tylko do lokalnych zmian.
Jeśli przypadkowo użyłeś git reset --hard, spróbuj przywrócić ostatni commit za pomocą:
git reflog git reset --hard
Tak, w przypadku git revert możesz podać więcej hash-y commitów:
git revert
W przypadku git reset możesz ustawić, o ile commitów chcesz się cofnąć:
git reset --hard HEAD~3
Jeśli jesteś zainteresowany szkoleniem programowania stacjonarnie lub online, zapoznaj się z naszą ofertą na www.like-it.sk. Nasze kursy prowadzą doświadczeni specjaliści, którzy pomogą Ci opanować programowanie od podstaw po zaawansowane techniki.
Marián Knězek