Git jako najpopularniejszy rozproszony system kontroli wersji – może się pochwalić rozbudowanym zbiorem funkcjonalności oraz różnego rodzaju integracji – co pozwala wykorzystać go swobodnie w wielu codziennych zadaniach.
W ramach tego materiału dowiesz się jak cofnąć zapisane już zmiany (git revert commit) w swoim lokalnym repozytorium wykorzystując komendę git revert.
Git revert – wprowadzenie
Z tego materiału dowiesz się:
- Jak cofać zapisane zmiany za pomocą komendy git revert?
- Jak wycofać ostatnią dokonaną zmianę w historii (git revert last commit)?
- Jak wycofać zmergowaną już zmianę (git revert merge)?
Git
W ramach tego materiału zajmiemy się przede wszystkim cofaniem zmian w Gicie (ang. git revert commit) – natomiast kompletny tutorial Git znajdziesz poniżej – tam również zapoznasz się ze stanami plików w git, które z punktu widzenia cofania zmian są bardzo istotne.
→ ZOBACZ 👉: Git tutorial | stash, rebase, commit, merge, checkout, push i clone
Git commit
Git revert cofa zmiany wprowadzone przez git commit. Jeżeli chcesz bliżej zapoznać się z tematem commit'a (zapisywaniem zmian) – to zapraszam do dodatkowych materiałów:
→ ZOBACZ 👉: Git commit | git commit amend.
Git revert commit – cofanie zmian
W celu wycofania zmian, które zostały już wysłane do zdalnego repozytorium, można skorzystać z commitów wycofujących, czyli z komendy git revert. Ten mechanizm nie modyfikuje historii (w przeciwieństwie do np. git commit amend), a generuje commit, który jest przeciwieństwem zmiany, którą chcemy wycofać.
Przykładowa komenda git revert – dla konkretnego commita:
git revert 2b5ed9d
Komenda git revert wymagana podania namiarów na commit, który chcemy wycofać – w tym wypadku wystarczył fragment hasha: 2b5ed9d.

Git revert posiada kilka dodatkowych opcji tzw. flag, których specyfikację możesz znaleźć w dokumentacji Git'a używając komendy git revert –help:

Git revert last commit – cofanie zmian ostatniego commit'a
Jeżeli ostatnio zapisana przez Ciebie zmiana (ang. commit), okaże się niepożądaną zmianą, którą chcesz wycofać – możesz postąpić w identyczny sposób, jak przy cofaniu dowolnego innego commita.
Czyli korzystamy z komendy: git revert
gdzie pod hash podstawiamy identyfikator ostatniego commita.
Historię wszystkich commitów możesz podejrzeć, np. korzystając z komendy: git log.
git revert 3d4ed9d
Git revert merge commit
W przeciwieństwie do innych commit'ów – merge commit jest commit'em, który ma przynajmniej dwóch rodziców.
Na przykład, gdy gałąź feature jest mergowana z gałęzią master, nowy commit jest tworzony na gałęzi master, i ma on dwóch rodziców: poprzedniego head'a gałęzi master i head'a gałęzi feature.
Oznacza to, że oprócz naszych zmian w merge commicie znajdują się zmiany kogoś innego.
Można cofnąć zmiany zarówno nasze, jak i drugiej osoby.
Cofając zmiany, należy wskazać ścieżkę, z której zmiany mają pozostać:
- -m 1 – zostają zmiany, które druga osoba zrobiła na masterze, natomiast Twoje zmiany zostaną wycofane
git revert -m 1 2b5ed10e
- -m 2 – Twoje zmiany pozostają , a zmiany drugiej osoby zostaną wycofane
git revert -m 2 2b5ed10e
Chcąc sprawdzić hashe commit'ów „rodziców”, możesz to zrobić, wykonując komendę: git show HEAD (Można również pominąć HEAD, ponieważ jest to domyślny parametr).
git show HEAD Merge: 1c7ed20e 2d7fd11e
Od lewej jest hash commit'a m1 (ang. parent side of the merge), a następnie m2.
Git show jest komendą, która ma znacznie więcej zastosowań poza wskazywaniem samych rodziców merge commit'a – może ja wykorzystać np. aby pokazywać:
- bloby (ang. blobs – binary large objects) – prezentuje zawartość blob'a,
- commit'y (ang. commits) – pokazuje opis zmian i tekstową różnicę,
- drzewa (ang. trees) – pokazuje nazwy składowych drzewa,
- tagi (ang. tags) – pokazuje wiadomość tag'a.
Git revert merge commit – cofanie commit'a ze zdalnego repozytorium
W przypadku, gdy niechciane zmiany „wysłaliśmy” (ang. git push) już na zdalne repozytorium, należy wycofać zmianę za pomocą komendy: git revert -m 1
Następnie zmiany wypychamy na zdalne repozytorium, używając komendy: git push.
Git revert commit – podsumowanie
W ramach tego materiału przećwiczyliśmy cofanie zmian w naszym lokalnym repozytorium (ang. git revert commit), a także wycofywanie już zmergowanej zmiany (ang. git revert merge commit).
Jeżeli chcesz kontynuować swoją przygodę z gitem – to zapraszam do dodatkowych materiałów:
→ ZOBACZ 👉: Git tutorial | stash, rebase, commit, merge, checkout, push i clone

