Git Revert
Ostatnia aktualizacja
git revert cofa commit, tworząc nowy commit, który wprowadza odwrotność jego zmian. Ponieważ dopisuje historię zamiast ją przepisywać, revert to bezpieczny sposób na cofnięcie commita, który jest już wypchnięty. W przeciwieństwie do git reset nie zmusza wszystkich innych do godzenia się z przepisaną gałęzią.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git revert HEAD | Cofa najnowszy commit |
git revert <hash> | Cofa konkretny commit po hashu |
git revert HEAD~2..HEAD | Cofa zakres commitów |
git revert -n <hash> | Cofa, ale jeszcze nie tworzy commita (tylko poczekalnia) |
git revert -m 1 <merge-hash> | Cofa commit scalający, zachowując rodzica 1 |
W trakcie revert
Jeśli revert trafi na konflikt, rozwiąż go i kontynuuj.
| Polecenie | Co robi |
|---|---|
git revert --continue | Wznawia po rozwiązaniu konfliktów |
git revert --abort | Anuluje trwający revert |
git revert --skip | Pomija bieżący commit i kontynuuje |
revert vs reset
| Zachowanie | git revert | git reset |
|---|---|---|
| Przepisuje historię | Nie | Tak |
| Bezpieczny przy wypchniętych commitach | Tak | Nie |
| Tworzy nowy commit | Tak | Nie |
| Cofa commit ze środka historii | Tak | Niewygodnie |
Najczęstsze pytania o git revert
Czym różni się git revert od git reset?
git revert dodaje nowy commit, który cofa zmiany wcześniejszego, i zostawia historię nietkniętą, więc jest bezpieczny dla commitów już wypchniętych. git reset przesuwa wskaźnik gałęzi do tyłu i przepisuje historię; to w porządku przy lokalnych commitach, ale niebezpieczne na wspólnych gałęziach. Revert służy do cofania publicznych commitów, reset do cofania lokalnych.Jak cofnąć commit, który jest już wypchnięty?
Uruchom
git revert <hash> (albo git revert HEAD dla najnowszego), a potem wypchnij nowy commit cofający. Ponieważ revert nie przepisuje historii, to właściwy sposób na cofnięcie wspólnego commita: bez force push i bez kłopotów dla osób z zespołu, które już go pobrały.Jak cofnąć commit scalający?
Commit scalający ma dwóch rodziców, więc Git musi wiedzieć, którą linię historii zachować. Użyj
git revert -m 1 <merge-hash>, gdzie -m 1 mówi Gitowi, żeby zachował pierwszego rodzica (zwykle gałąź, do której scalano). Revert scalenia cofa scalone zmiany, ale zostawia sam merge w historii.Czy można cofnąć kilka commitów naraz?
Tak. Podaj zakres, np.
git revert HEAD~2..HEAD, żeby cofnąć dwa ostatnie commity, albo wymień kilka hashy. Domyślnie Git tworzy jeden commit cofający na każdy cofany commit; dodaj -n, żeby umieścić wszystkie odwrócenia w poczekalni bez commita, a potem zrób jeden commit samodzielnie.Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom
git revert w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia cofanie zmian.