Git jest git: Cofnięcie wypchniętego commita

Sytuacja jest prosta – chcemy wycofać ostatni, już push’nięty commit z repozytorium. Aby tego dokonać należy:

  1. Cofnąć lokalne repozytorium o jeden commit
    git reset --hard HEAD~1
  2. Wykonać force-push do zdalnego repozytorium
    git push -f origin feature/SON-234

Aby operacja zakończyła się sukcesem, to na docelowym branchu musi być dozwolona modyfikacja historii repozytorium. Warto tutaj również wspomnieć, iż niezalecane jest stosować tej praktyki na głównym branchu, lecz tylko na feature branchach.

undo-pushed-commit


Revert

Jeśli uprawnienia na branchu nie zezwalają na modyfikację historii, to nie pozostaje nic innego jak revert, czyli utworzenie commita odwracającego zmiany. W tym wypadku należy:

  1. Utworzyć commit cofający zmiany
    git revert HEAD

    GIT automatycznie zasugeruje opis commita w postaci: Revert „xxx”

  2. Wypchnąć zmiany do zdalnego repozytorium
    git push

revert-pushed-commit

Podbij ↑

8 thoughts on “Git jest git: Cofnięcie wypchniętego commita

  1. Brakuje tylko informacji, że pierwszego podejście nie powinno się stosować, jeśli nie chce się narobić problemów reszcie zespołu. Nadpisywanie historii zdalnego repozytorium nie należy do 'good practice’

  2. Jeśli ktoś robi code review z gerritem lub innym gitolubnym narzędziem (build+testy+recenzja kolegi) to problemy z pchnięciem złego kodu na mastera w dużej mierze da się wyeliminować.

    Co do feature branchy to muszę przyznać że często korzystam z git reset dlatego że lubię robić wiele commitów checkpoint’ów a przed pchnięciem na serwer najczęściej zamieniam jest w jeden właściwy commit (squash via git rebase -i). Warto tutaj wspomnieć też o poleceniu git reflog które nieraz już ratowało mnie z poważnych tarapatów – zwłaszcza jeżeli git reset wyciachał za dużo :)

Skomentuj pwlklm Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *