Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Claude Code zrobił commit, którego nie chciałem - jak cofnąć i zapobiec

W skrocie

  • Problem: Claude Code wykonał commit (albo push), na który nie miałeś ochoty, i chcesz to cofnąć oraz nie dopuścić do powtórki.
  • Dlaczego: narzędzie może uruchamiać polecenia gita, jeśli ma na to zgodę, a przy szerokich uprawnieniach robi to bez pytania.
  • Rozwiązanie: cofnij commit standardowymi poleceniami gita, a na przyszłość ustaw zasadę w CLAUDE.md i zawęź uprawnienia.

Niechciany commit zrobiony przez Claude Code to sytuacja, która wygląda groźniej, niż jest. Git daje pełną kontrolę nad historią, więc da się to cofnąć, a co ważniejsze, da się ustawić pracę tak, by narzędzie nie commitowało na własną rękę. Pokażemy jedno i drugie: jak posprzątać teraz i jak zabezpieczyć się na przyszłość.

Jak to wyglada w praktyce

Zwykle wygląda to tak: prosisz o zmianę w kodzie, a przy okazji Claude Code od razu robi commit, czasem z opisem, którego nie chciałeś, albo obejmujący więcej plików, niż zakładałeś. Bywa gorzej, gdy uprawnienia były bardzo szerokie i narzędzie od razu wykonało push do zdalnego repozytorium.

Druga wersja tego problemu to commit w złym momencie: kod nie był jeszcze gotowy, testy nie przeszły, a w historii już jest wpis. Sam kod zwykle jest do uratowania, ale chodzi o to, żeby historia repozytorium odzwierciedlała to, co naprawdę chcesz w niej mieć.

Dlaczego Claude Code tak dziala

Claude Code potrafi uruchamiać polecenia w Twoim środowisku, w tym polecenia gita, o ile ma na to zgodę. To ogromna zaleta, bo pozwala automatyzować powtarzalną pracę, ale ma drugą stronę: jeśli nadałeś narzędziu szerokie uprawnienia albo zaakceptowałeś operację na szybko, może ono zrobić commit czy push bez dodatkowego pytania.

Sama treść zadania też ma znaczenie. Jeśli poprosisz ogólnie ogarnij to i zapisz, narzędzie może uznać commit za naturalny element wykonania. Dlatego niechciany commit to zwykle skutek dwóch rzeczy naraz: zbyt szerokich uprawnień i niedoprecyzowanej intencji. Dobra wiadomość jest taka, że obie da się ustawić raz a dobrze, i problem znika.

Jak to rozwiazac krok po kroku

  1. Najpierw oszacuj sytuację: sprawdź stan repozytorium poleceniem git status i historię poleceniem git log, żeby zobaczyć, co dokładnie zostało zacommitowane.
  2. Jeśli commit jest ostatni i nie był wypchnięty, a chcesz zachować zmiany w plikach, cofnij sam commit, zostawiając pracę w katalogu: git reset --soft HEAD~1.
  3. Jeśli chcesz cofnąć commit i wyjąć zmiany do stanu niezaindeksowanego, użyj git reset --mixed HEAD~1. Zmiany zostają w plikach, ale nie są już przygotowane ani zacommitowane.
  4. Jeśli commit został już wypchnięty, nie przepisuj historii na siłę. Bezpieczniej dodać commit odwracający zmianę poleceniem git revert, zwłaszcza gdy z repozytorium korzysta ktoś jeszcze.
  5. Na przyszłość dopisz w CLAUDE.md jednoznaczną zasadę, na przykład że narzędzie nie robi commita ani push bez wyraźnego polecenia. Narzędzie czyta ten plik i traktuje go jak instrukcję projektu.
  6. Zawęź uprawnienia: nie udzielaj zgody na operacje gita na stałe, tylko akceptuj je świadomie, a operacje wypychające zmiany zostaw wyłącznie na wyraźne polecenie.

Jak sprawdzic, ze zadzialalo

Sprawdzian po sprzątaniu jest prosty: ponowne git status i git log pokazują stan, którego chcesz, czyli albo cofnięty commit ze zmianami odłożonymi do przejrzenia, albo czystą historię z commitem odwracającym, jeśli zmiana była już wypchnięta.

Dowodem, że zabezpieczyłeś się na przyszłość, jest zachowanie narzędzia w kolejnej sesji: gdy poprosisz o zmianę w kodzie, Claude Code wprowadza ją, ale nie commituje z własnej inicjatywy, tylko czeka na Twoje wyraźne polecenie. Jeśli tak się dzieje, zasada z CLAUDE.md i zawężone uprawnienia działają.

Wroc do listy: 100 najczestszych problemow z Claude Code

Szkolenie Claude Code - od zera do zespołu agentów AI, prowadzi Łukasz Matuszewski (JSystems)

Szkolenie Claude Code - od zera do zespołu agentów AI -->

Szkolenie Claude Code - od zera do zespołu agentów AI

Tryb planowania, tryby uprawnień, komendy, MCP, hooki i systemy multi-agent - wszystko na żywym kodzie podczas trzydniowego szkolenia. Prowadzi Łukasz Matuszewski. Szkolenie ma terminy gwarantowane - odbędzie się niezależnie od liczby zgłoszeń.

Sprawdź szkolenie Claude Code

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Jak cofnąć ostatni commit zrobiony przez Claude Code bez utraty zmian?
Jeśli commit nie był wypchnięty, użyj git reset --soft HEAD~1, żeby cofnąć sam commit i zostawić zmiany przygotowane w katalogu. Jeśli wolisz mieć je jako niezaindeksowane, użyj git reset --mixed HEAD~1. W obu wariantach kod zostaje, znika tylko wpis w historii.
Co zrobić, gdy niechciany commit został już wypchnięty?
Nie przepisuj historii na siłę, zwłaszcza gdy z repozytorium korzysta ktoś jeszcze. Bezpieczniej dodać commit odwracający zmianę poleceniem git revert. Historia pozostaje spójna dla wszystkich, a niechciana zmiana zostaje wycofana osobnym wpisem.
Jak sprawić, żeby Claude Code nie commitował bez pytania?
Dopisz w CLAUDE.md jednoznaczną zasadę, na przykład że narzędzie nie robi commita ani push bez wyraźnego polecenia. Narzędzie czyta ten plik jak instrukcję projektu. Dodatkowo nie udzielaj zgody na operacje gita na stałe, tylko akceptuj je świadomie.
Dlaczego Claude Code w ogóle zrobił commit sam z siebie?
Bo może uruchamiać polecenia gita, jeśli ma na to zgodę, a przy szerokich uprawnieniach robi to bez dodatkowego pytania. Sprzyja temu też ogólne polecenie typu ogarnij i zapisz. To skutek zbyt szerokich uprawnień i niedoprecyzowanej intencji naraz.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...