17. Usuwanie zatwierdzenia z gałęzi
Cele
- Aby dowiedzieć się, jak usunąć najnowsze zatwierdzenia gałęzi
Revert
to potężne polecenie z poprzedniej sekcji, które pozwala anulować wszelkie zatwierdzenia do repozytorium. Jednak zarówno oryginalne, jak i anulowane zatwierdzenia są widoczne w historii gałęzi (używając polecenia git log
).
Często po wykonaniu zatwierdzenia zdajemy sobie sprawę, że to pomyłka. Byłoby miło mieć polecenie cofnij, które pozwala na natychmiastowe usunięcie nieprawidłowych zatwierdzeń. To polecenie zapobiegłoby pojawieniu się jednego lub więcej niechcianych zatwierdzeń w historii git log
.
01 Polecenie resetowania
Użyliśmy już polecenia reset
, aby dopasować strefę bufora i wybrane zatwierdzenie (zatwierdzenie HEAD zostało użyte w poprzedniej lekcji).
Gdy podane jest odwołanie do zatwierdzenia (np. gałąź, skrót lub nazwa znacznika), reset
polecenie …
- Zastąpi bieżącą gałąź, aby wskazywała na poprawne zatwierdzenie
- Opcjonalnie zresetuje strefę buforową, aby była zgodna z określonym zatwierdzeniem
- Opcjonalnie zresetuj katalog roboczy, aby pasował do podanego zatwierdzenia
02 Sprawdź naszą historię
Zróbmy szybkie przejrzenie naszej historii zmian .
Uruchom:
git hist
Wynik:
Widzimy, że ostatnie dwa zatwierdzenia w tej gałęzi to „Ups ”i„ Cofnij Ups ”. Usuńmy je za pomocą polecenia reset
.
03 Oznacz najpierw tę gałąź
Zaznaczmy ostatnie zatwierdzenie tag, so you can find it after removing a commit(s).
Uruchom:
git tag oops
04 Zresetuj zatwierdzenie do poprzedniego Ups
W w dzienniku historii powyżej, zatwierdzenie oznaczone jako „v1” znajduje się przed zatwierdzeniami „Ups” i „Revert Oops”. Zresetujmy gałąź do tego punktu. Ponieważ gałąź ma tag, możemy użyć nazwy tagu w poleceniu reset (jeśli nie ma tagu, możemy użyć wartości hash).
Uruchom:
git reset --hard v1git hist
Wynik:
Nasza gałąź główna wskazuje na zatwierdzenie v1, a zatwierdzenia „Revert Oops” i „Uops” już nie istnieją w gałęzi. Parametr --hard
sprawia, że katalog roboczy odzwierciedla nową nagłówek gałęzi.
05 Nic nie jest stracone
Co się stało z niewłaściwymi zatwierdzeniami? Nadal są w repozytorium. Właściwie nadal możemy się do nich odwoływać. Na początku lekcji utworzyliśmy znacznik „oops” dla anulowanego zatwierdzenia. Przyjrzyjmy się wszystkim zatwierdzeniom.
Uruchom:
git hist --all
Wynik:
Widzimy, że złe zatwierdzenia nie zniknęły. Nie są już wymienione w gałęzi głównej, ale nadal pozostają w repozytorium. Nadal byłyby w repozytorium, gdybyśmy ich nie otagowali, ale wtedy moglibyśmy odwoływać się do nich tylko za pomocą ich skrótów. Zatwierdzenia bez odwołań pozostają w repozytorium do czasu uruchomienia oprogramowania do usuwania elementów bezużytecznych przez system.
06 Resetowanie zagrożeń
Resetowanie lokalnych gałęzi jest zwykle nieszkodliwe. Konsekwencje każdego „wypadku” można cofnąć, używając odpowiedniego zatwierdzenia.
Jednak inni użytkownicy współużytkujący gałąź mogą być zdezorientowani, jeśli gałąź jest udostępniana w zdalnych repozytoriach.