Usuwanie zatwierdzeń git

Podczas pracy z Git zauważysz, że czasami zatwierdzenia wymagają usunięcia, ponieważ wprowadziły błąd lub wymagają przeróbki.

Jeśli tak jest ostatnie zatwierdzenie to jest bardzo proste. Po prostu uruchom:

git reset HEAD^

Spowoduje to usunięcie ostatniego zatwierdzenia, ale pozostawi wszystkie zmiany w plikach nienaruszone.

Jeśli chcesz usunąć więcej niż tylko ostatnie zatwierdzenie, możesz użyć dwóch metod. Pierwszym jest użycie rebase, które pozwoli ci usunąć jedno lub więcej kolejnych zatwierdzeń, a drugim jest cherry-pick, który pozwala na usunięcie nie kolejnych zatwierdzeń.

Przykład git log

Numer Hash Komunikat zatwierdzenia Autor
1 2c6a45b (HEAD) Dodawanie metody publicznej aby uzyskać dostęp do metody chronionej Tom
2 ae45fab Aktualizacje interfejsu bazy danych Wykonawca 1
3 77b9b82 Poprawa interfejsu bazy danych Wykonawca 2
4 3c9093c Scalono gałąź deweloperską w master Tom
5 b3d92c5 Dodawanie nowego modułu Event CMS Paweł
6 7feddbb Dodawanie klasy i plików CMS Tom
7 a809379 Dodawanie projektu do Git Tom

Korzystanie z Rebase

Korzystając z powyższego dziennika git, chcemy usunąć następujące zatwierdzenia; 2 & 3 (ae45fab & 77b9b82). Ponieważ są to kolejne zatwierdzenia, możemy użyć rebase.

git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

np. Do usunięcia zatwierdzeń 2 & 3 powyżej

git rebase --onto repair~3 repair~1 repair

Korzystanie z Cherry Pick

Krok 1: Znajdź zatwierdzenie przed zatwierdzeniem chcesz usunąć git log

Krok 2: Sprawdź, czy zatwierdzenie git checkout <commit hash>

Krok 3 : Stwórz nową gałąź, używając aktualnego zatwierdzenia płatności git checkout -b <new branch>

Krok 4: Teraz musisz dodać zatwierdzenie po usuniętym zatwierdzeniu git cherry-pick <commit hash>

Krok 5: Teraz powtórz krok 4 dla wszystkich innych zatwierdzeń, które chcesz zachować.

Krok 6: Po dodaniu wszystkich zatwierdzeń do nowej gałęzi i został zaangażowany. Sprawdź, czy wszystko jest w odpowiednim stanie i działa zgodnie z przeznaczeniem. Dokładnie sprawdź, czy wszystko zostało zatwierdzone: git status

Krok 7: Przełącz się na uszkodzony oddział git checkout <broken branch>

Krok 8: Teraz wykonaj twardy reset uszkodzonej gałęzi do zatwierdzenia przed tą, którą chcesz usunąć git reset --hard <commit hash>

Krok 9: Scal swoje naprawiona gałąź do tej gałęzi git merge <branch name>

Krok 10: Przenieś scalone zmiany z powrotem do początku. OSTRZEŻENIE: Spowoduje to nadpisanie zdalnego repozytorium! git push --force origin <branch name>

Możesz wykonać ten proces bez tworzenia nowej gałęzi, zastępując krok 2 & 3 krokiem 8, a następnie nie wykonywać kroku 7 & 9.

Przykład

Powiedzmy, że chcemy usunąć zmiany 2 & 4 z repozytorium.

  1. git checkout b3d92c5 Sprawdź ostatnie dostępne zatwierdzenie.
  2. git checkout -b repair Utwórz nową gałąź do pracy.
  3. git cherry-pick 77b9b82 Wykonaj zatwierdzenie 3.
  4. git cherry-pick 2c6a45b Wykonaj zatwierdzenie 1.
  5. git checkout master wzorzec realizacji transakcji.
  6. git reset --hard b3d92c5 Zresetuj wzorzec do ostatniego nadającego się do użycia zatwierdzenia.
  7. git merge repair Połącz naszą nową gałąź z wzorcem.
  8. git push --hard origin master Push master do zdalnego repozytorium.

Ostatnia uwaga

Git rebase & cherrypick są niebezpieczne, ale potężne rozwiązania, które powinny być używane tylko jako ostatnie opcji i być podejmowane tylko przez kogoś, kto wie, co robią. Uważaj, oba rozwiązania mogą mieć negatywny wpływ na innych użytkowników, którzy pracują w tym samym repozytorium / gałęzi.

Na koniec pamiętaj, aby zachować ostrożność i powodzenia!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *