Miałeś kiedyś problem, aby usunąć przedostatni commit? Dziś o tym, jak usunąć dowolną rewizję z Git-a na 2 sposoby.
Krok po kroku 👣
Na początku przedstawiam historię repozytorium:
git log --oneline
09ee68e Rewizja 4 (HEAD)
60c495b Rewizja 3
6e45e15 Rewizja 2
749fcaa Rewizja 1
Do czego dążymy?
Zdefiniujmy cel zadania, aby wszystko było jasne:
Cel
Usunięcie commita o
id=60c495b
, który ma commit message “Rewizja 3”.
Realizacja
Skorzystajmy z polecenia git rebase
, które jest w stanie zarządzić historią.
1. Cofamy się o dwa commity, czyli do “Rewizja 1”
git rebase -i 749fcaa
Po tej linijce powinien uruchomić się domyślny edytor.
Wskazówka
Jak zmienić domyślny edytor? Nadpisz zmienną środowiskową
$EDITOR
za pomocą polecenie:export EDITOR="nano"
2. (dla starych wersji Gita) Usuwamy linijkę z commitem
pick 749fcaa - Rewizja 1
pick 6e45e15 - Rewizja 2
pick 09ee68e - Rewizja 4
2. (dla nowych wersji Gita) Ustawiamy stan commita na drop
pick 749fcaa - Rewizja 1
pick 6e45e15 - Rewizja 2
drop 60c495b - Rewizja 3
pick 09ee68e - Rewizja 4
3. Zapisujemy plik oraz wychodzimy z edytora
Naszym oczom powinien ukazać się komunikat w stylu:
Successfully rebased and updated refs/heads/master.
Efekt końcowy jest następujący:
- Nie ma rewizji w historii,
- Nie ma zmian wprowadzanych przez usuniętą rewizję.
Dla przypomnienia
W edytorze Vim plik zapisujemy za pomocą polecenie
:w
(write), natomiast opuszczamy edytor za pomocą:q
(quit).
Powyższe polecenia można uruchomić za pomocą jednego::wq
.
⭐️ Ćwiczenie dodatkowe
Spróbuj zmienić kolejność rewizji, tak aby git log --oneline
pokazywał inną
niż pierwotnie historię rewizji.
Wskazówka
Gdy będzie otwarty edytor, zmień kolejność linijek z rewizjami.