Jak cofnąć zmiany wprowadzone przez agenta programistycznego AI
Bezpiecznie cofnij edycje agenta programistycznego AI: przywróć jeden plik, odrzuć zmiany spoza commitów lub cofnij jego commit, nie tracąc własnej pracy.
Aby cofnąć zmiany agenta programistycznego AI, sprawdź, co się zmieniło, i użyj pasującego polecenia Git: git restore dla edytowanych plików, git clean dla nowych plików i git revert dla commita. Najpierw zrób kopię zapasową poleceniem git stash. Wbudowane polecenie Claude Code, /rewind, też potrafi przywrócić kod, ale nie śledzi każdej zmiany.
Ten poradnik zaczyna się w chwili, gdy już zdecydowałeś, że odrzucasz tę pracę; w podjęciu decyzji pomoże przegląd zmian w kodzie od AI. Mono pokazuje, co się zmieniło, ale tego nie cofa, więc i tam używasz tych samych poleceń.
1. Zatrzymaj agenta i sprawdź, co się zmieniło
Najpierw zatrzymaj agenta. W Mono, gdy agent pracuje, przycisk wysyłania zmienia się w przycisk anulowania. W terminalu w folderze projektu uruchom:
git status
git log --oneline -5Pierwsze polecenie wyświetla zmodyfikowane, usunięte, przygotowane do commita (staged) i nowe pliki. Drugie pokazuje ostatnie commity, także te utworzone przez agenta. Zanotuj, które zmiany są Twoje: polecenia cofające nie wiedzą, kto napisał dany wiersz.
| Co widzisz | Jak to cofnąć |
|---|---|
| Zmodyfikowany lub usunięty plik, nieprzygotowany do commita | git restore <path> |
| Zmiana przygotowana do commita | git restore --staged <path>, potem cofnij zmiany w pliku |
| Nowy, nieśledzony plik | git clean -n <path>, potem git clean -f <path> |
| Commit, którego nie chciałeś | git revert <commit> |
W Mono „Pokaż zmiany” wyświetla zmodyfikowane i nowe pliki od ostatniego commita, więc nie pokaże commita utworzonego przez agenta.
2. Najpierw zrób kopię zapasową
Polecenia restore i clean trwale usuwają zmiany, których nie ma w żadnym commicie, więc najpierw zapisz wszystko:
git stash push --include-untracked -m "before undo"
git stash apply --indexPierwsze polecenie zapisuje zmodyfikowane i nowe pliki oraz czyści katalog roboczy; drugie przywraca je, zachowując to, co było przygotowane do commita. Na pozór nic się nie zmienia, ale git stash list zawiera teraz kopię o nazwie „before undo”.
Jeśli cofniesz za dużo, git restore --source "stash@{0}" <path> przywróci edytowany plik z najnowszego stasha.
3. Cofnij jeden plik lub jego część
Wybierz najwęższe polecenie:
git restore <path>odrzuca w tym pliku zmiany nieprzygotowane do commita.git restore --staged <path>wycofuje zmianę z przygotowanych do commita, ale zostawia edycję w pliku.git restore -p <path>pyta osobno o każdą zmienioną część (hunk), co pomaga, gdy Ty i agent edytowaliście ten sam plik.git clean -n <path>wyświetla nieśledzone pliki, które usunęłobygit clean -f <path>. Zawsze podawaj ścieżkę.
Dokumentacja git restore wyjaśnia każdą opcję.
4. Cofnij wszystko, czego agent nie zatwierdził w commicie
Jeśli żadna ze zmian nie jest Twoja, odrzuć je wszystkie z katalogu głównego projektu poleceniem git restore --staged --worktree ., a nowe pliki usuń przez git clean -n . i git clean -f .. W przeciwnym razie podawaj konkretne ścieżki.
Fikcyjny przykład: poprosiłeś agenta o zmianę nazwy klasy CSS .btn-primary na .button-main w projekcie „tidy-recipes”. Wcześniej agent utworzył commit z aktualizacją pliku lockfile, o którą nikt nie prosił. Tym razem zmienił klasę w 3 plikach, przeformatował 12 niezwiązanych plików i utworzył styles/tokens.css. W międzyczasie Ty ręcznie edytowałeś README.md i chcesz tę zmianę zachować.
Po zrobieniu kopii zapasowej przywróć pliki agenta (tutaj src/ i styles/main.css) i usuń jego nowy plik:
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.cssNie używaj tu git restore .: odrzuciłoby to także Twoją edycję README. Gdybyś miał własne edycje w src/, wymień pliki agenta pojedynczo.
Teraz git status pokazuje tylko README.md, a git diff tylko Twoje wiersze. Commit z aktualizacją lockfile nadal jest w historii.
5. Cofnij commit, który agent już utworzył
git revert tworzy nowy commit, który odwraca wcześniejszy. Dokumentacja git revert mówi, że wymaga on czystego katalogu roboczego, więc najpierw odłóż na bok edycję README:
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash popUżyj hasha z git log i dodaj --no-edit, żeby pominąć edytor wiadomości. git stash pop przywraca „readme” i zostawia „before undo” na liście. Teraz git status pokazuje tylko README.md, a git log --oneline pokazuje na górze Revert "Update lockfile".
W przypadku wypchniętego commita wybierz revert zamiast git reset: reset przepisuje historię, którą inni mogą już mieć. Jeśli po resecie lub rebasie commit wydaje się utracony, git reflog pokazuje commity, na których ostatnio byłeś, razem z ich hashami.
6. Korzystaj z punktów kontrolnych agenta, a Git traktuj jako zabezpieczenie
Claude Code zapisuje punkt kontrolny przed każdym promptem: uruchom /rewind albo naciśnij dwa razy Esc przy pustym prompcie, żeby przywrócić kod, rozmowę lub jedno i drugie. Jego dokumentacja punktów kontrolnych wymienia ograniczenia: zmiany wprowadzone poleceniami powłoki nie są śledzone, zmiany wprowadzone poza agentem zwykle nie są rejestrowane, a punkty kontrolne nie zastępują kontroli wersji. Dostępność zależy też od aplikacji, w której uruchamiasz agenta.
Dlatego niech Git będzie Twoim zabezpieczeniem:
- Przed każdym zadaniem utwórz commit lub gałąź, żeby „ostatni commit” znaczył „stan sprzed pracy agenta”.
- Powiedz agentowi, żeby nie tworzył commitów bez pytania, na przykład w pliku AGENTS.md.
- Nie wyłączaj próśb o zgodę. Tryb YOLO w Mono, który akceptuje każdą prośbę agenta, jest domyślnie wyłączony. Zobacz, co sprawdzić, zanim zezwolisz.
W Mono karta projektu otwiera terminal w folderze projektu na Twoim komputerze, także z telefonu (zobacz poradnik zdalnego programowania). Mono nie jest jeszcze dostępny, ale możesz dołączyć do listy oczekujących.
