Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Claude Code zmienia pliki, których nie miał ruszać

W skrócie

  • Prosisz Claude Code o zmianę w jednym miejscu, a on przy okazji przerabia inne pliki, formatuje cały moduł albo zmienia rzeczy, których nie miał dotykać.
  • Powodem jest zbyt szeroki zakres polecenia plus to, że model sam decyduje, co jest częścią zadania, gdy nie zamkniesz mu granic.
  • Rozwiązanie: precyzyjnie ogranicz zakres w prompcie, pracuj na czystym drzewie Git i przeglądaj każdy diff przed zaakceptowaniem zmian.

Claude Code, oficjalne narzędzie CLI od Anthropic do programowania z pomocą AI, potrafi w jednej turze przeczytać kilka plików, zaplanować zmianę i od razu ją wprowadzić. To ogromna wygoda, ale ma drugą stronę: jeśli nie powiesz mu wyraźnie, czego nie ruszać, sam uzna, że skoro poprawiasz funkcję logowania, to wypada przy okazji uporządkować importy w trzech sąsiednich modułach. Efekt to diff większy, niż zamawiałeś, i pytanie: kto właściwie prosił o te zmiany.

Jak to wygląda w praktyce

Typowy scenariusz: prosisz o dodanie jednego pola do formularza, a Claude Code przy okazji przeformatuje cały plik (bo miał inny styl niż reszta projektu), zmieni nazwy dwóch zmiennych na czytelniejsze i poprawi literówkę w komentarzu w zupełnie innym miejscu. Sam zmiana bywa poprawna, ale nie o to prosiłeś. Gorszy wariant: modyfikuje plik konfiguracyjny albo migrację, której w ogóle nie miałeś w planie tej sesji. Gdy pracujesz bez kontroli wersji, orientujesz się dopiero, gdy coś przestaje działać, i nie wiesz, która z kilkunastu zmian to zepsuła.

Dlaczego Claude Code tak działa

Claude Code jest agentem, nie autouzupełnianiem. Dostaje zadanie, samodzielnie czyta pliki, buduje plan i wykonuje go narzędziami do edycji. Gdy polecenie jest ogólne (na przykład popraw ten moduł), model interpretuje intencję szeroko i dokłada rzeczy, które według niego mieszczą się w duchu prośby: spójny styl, lepsze nazwy, uporządkowane importy. To nie błąd narzędzia, tylko skutek tego, że zostawiłeś mu przestrzeń do decyzji. Dochodzi do tego druga rzecz: jeśli w projekcie jest plik CLAUDE.md z regułami albo aktywny hook formatujący, część zmian może pochodzić stamtąd, a nie z samego polecenia. Model realizuje kontekst, który mu dałeś, łącznie z tym zapisanym w projekcie.

Jak to rozwiązać krok po kroku

  1. Zamknij zakres już w prompcie. Zamiast popraw moduł napisz: zmień wyłącznie plik auth/login.py, dodaj jedno pole, nie dotykaj innych plików, nie zmieniaj formatowania ani nazw zmiennych, których nie edytujesz.
  2. Pracuj na czystym drzewie Git. Przed sesją zrób commit albo git stash, żeby git status był pusty. Wtedy każda zmiana Claude Code jest widoczna jako świeży diff, a nie miesza się z Twoją pracą w toku.
  3. Przeglądaj zmiany przed akceptacją. Claude Code pokazuje diff przed zapisem, więc czytaj go zamiast klikać zgodę automatycznie. Jeśli zobaczysz zmianę spoza zakresu, odrzuć ją i doprecyzuj polecenie.
  4. Nie właczaj trybu bez potwierdzeń tam, gdzie zależy Ci na kontroli. Tryb automatycznej akceptacji edycji jest wygodny przy zabawie, ale przy realnym kodzie zostaw sobie moment na spojrzenie na diff.
  5. Wykorzystaj plik CLAUDE.md jako stałą barierę. Wpisz tam regułę w stylu: nie zmieniaj plików spoza wyraźnie wskazanych, nie przeformatowuj kodu bez polecenia, nie zmieniaj nazw zmiennych przy okazji. Model czyta ten plik na starcie i traktuje go jak instrukcje projektu.
  6. Gdy zakres jest duży, dziel pracę na małe tury. Jedna zmiana, jeden przegląd, jeden commit. Łatwiej wtedy wychwycić moment, w którym coś poszło za daleko.
  7. Jeśli mimo wszystko wjechały niechciane zmiany, cofnij je selektywnie: git checkout -- sciezka/do/pliku dla pojedynczego pliku albo git restore -p, żeby odrzucić konkretne fragmenty diffu.

Jak sprawdzić, że zadziałało

Po zakończeniu tury wpisz git status i git diff. Na liście zmienionych plików powinien być tylko ten, o który prosiłeś. Jeśli widzisz inne, to znak, że zakres nie był dość ciasny, a diff pokaże dokładnie, co model dołożył od siebie. Sprawdź też, czy zmieniły się linie, których nie miałeś ruszać: jeżeli diff zawiera przeformatowany blok albo zmienione nazwy poza Twoim polem, cofnij te fragmenty i powtórz polecenie z twardszym ograniczeniem. Dobrze działający układ to taki, w którym po każdej turze diff jest mały, czytelny i w całości pokrywa się z tym, o co prosiłeś.

Wróć do listy: 100 najczęstszych problemów 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

Dlaczego Claude Code zmienia pliki, o które wcale nie prosiłem?
Claude Code jest agentem, który sam decyduje, co należy do zadania, więc przy ogólnym poleceniu interpretuje intencję szeroko i dokłada rzeczy od siebie, na przykład porządkuje importy albo zmienia nazwy zmiennych w sąsiednich plikach. To nie usterka, tylko skutek tego, że zostawiłeś mu przestrzeń do decyzji. Część zmian może też pochodzić z pliku CLAUDE.md albo z aktywnego hooka formatującego.
Jak zawęzić polecenie, żeby Claude Code ruszał tylko wskazany plik?
Zamknij zakres wprost w prompcie: napisz, że ma zmienić wyłącznie konkretny plik, dodać jedną rzecz i nie dotykać innych plików ani formatowania i nazw, których nie edytuje. Dodatkowo wpisz stałą regułę do pliku CLAUDE.md, na przykład że nie wolno zmieniać plików spoza wyraźnie wskazanych, bo model czyta ten plik na starcie każdej sesji.
Jak pracować z Gitem, żeby wyłapać niechciane zmiany Claude Code?
Przed sesją zrób commit albo stash, żeby drzewo było czyste i git status pusty. Wtedy każda zmiana narzędzia jest widoczna jako świeży diff i nie miesza się z Twoją pracą w toku. Po turze przejrzyj git diff i, jeśli coś wjechało poza zakresem, cofnij to selektywnie przez git checkout wskazanego pliku albo git restore z wyborem fragmentów.
Po czym poznam, że Claude Code zmienił dokładnie to, o co prosiłem?
Po turze wpisz git status i git diff: na liście zmienionych plików powinien być tylko ten zamówiony, a w diffie tylko te linie, które miałeś ruszyć. Jeśli widzisz przeformatowany blok albo zmienione nazwy poza Twoim polem, cofnij te fragmenty i powtórz polecenie z twardszym ograniczeniem. Dobry stan to mały, czytelny diff w całości pokrywający się z prośbą.

Komentarze (0)

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

Brak komentarzy...