Как отменить изменения, сделанные ИИ-агентом в коде
Безопасно отмените правки ИИ-агента для кода: восстановите один файл, отбросьте незакоммиченные изменения или откатите его коммит, не потеряв свою работу.
Чтобы отменить изменения ИИ-агента для кода, проверьте, что изменилось, и используйте подходящую команду Git: git restore для изменённых файлов, git clean для новых и git revert для коммита. Сначала сохраните страховочную копию через git stash. Собственная команда Claude Code /rewind тоже умеет восстанавливать код, но отслеживает не все изменения.
Это руководство начинается с момента, когда вы уже решили отказаться от работы агента; принять решение поможет проверка изменений кода от ИИ. Mono показывает, что изменилось, но не отменяет изменения, поэтому и там команды те же.
1. Остановите агента и посмотрите, что изменилось
Сначала остановите агента. В Mono, пока агент работает, кнопка отправки превращается в кнопку отмены. В терминале в папке проекта выполните:
git status
git log --oneline -5Первая команда показывает изменённые, удалённые, проиндексированные и новые файлы. Вторая показывает последние коммиты, включая сделанные агентом. Отметьте, какие изменения ваши: команды отмены не знают, кто написал строку.
| Что вы видите | Как это отменить |
|---|---|
| Изменённый или удалённый файл, не в индексе | git restore <path> |
| Изменение в индексе | git restore --staged <path>, затем отмените правку в файле |
| Новый неотслеживаемый файл | git clean -n <path>, затем git clean -f <path> |
| Коммит, который вам не нужен | git revert <commit> |
В Mono «Показать изменения» выводит изменённые и новые файлы с последнего коммита, поэтому коммит, сделанный агентом, там не появится.
2. Сначала сохраните страховочную копию
Команды restore и clean безвозвратно отбрасывают незакоммиченную работу, поэтому сначала сохраните всё:
git stash push --include-untracked -m "before undo"
git stash apply --indexПервая команда сохраняет изменённые и новые файлы и очищает рабочее дерево, вторая возвращает их на место, сохраняя состояние индекса. Внешне ничего не меняется, но теперь в git stash list есть копия под названием «before undo».
Если отмените лишнее, git restore --source "stash@{0}" <path> вернёт изменённый файл из последней записи stash.
3. Отмените изменения в одном файле или его части
Выбирайте самую точечную команду:
git restore <path>отбрасывает неиндексированные правки в этом файле.git restore --staged <path>убирает изменение из индекса, но оставляет правку в файле.git restore -p <path>спрашивает о каждой изменённой части (hunk) отдельно; это помогает, когда вы и агент правили один и тот же файл.git clean -n <path>показывает неотслеживаемые файлы, которые удалитgit clean -f <path>. Всегда указывайте путь.
Каждый параметр объясняется в документации git restore.
4. Отмените всё, что агент оставил незакоммиченным
Если среди изменений нет ваших, отбросьте их все из корня проекта командой git restore --staged --worktree ., а для новых файлов выполните git clean -n . и git clean -f .. Иначе указывайте конкретные пути.
Вымышленный пример: вы попросили агента переименовать CSS-класс .btn-primary в .button-main в проекте «tidy-recipes». Раньше он уже закоммитил обновление lock-файла, о котором никто не просил. На этот раз он изменил класс в 3 файлах, переформатировал 12 файлов, не связанных с задачей, и создал styles/tokens.css. Тем временем вы вручную правили README.md и хотите эти правки сохранить.
После страховочной копии восстановите файлы агента (здесь это src/ и styles/main.css) и удалите его новый файл:
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.cssНе используйте здесь git restore .: эта команда отбросит и вашу правку README. Если у вас были правки внутри src/, перечислите файлы агента по одному.
Теперь git status показывает только README.md, а git diff показывает только ваши строки. Коммит с lock-файлом по-прежнему на месте.
5. Отмените коммит, который агент уже сделал
git revert создаёт новый коммит, который отменяет предыдущий. В документации git revert сказано, что для этого нужно чистое рабочее дерево, поэтому сначала отложите правку README:
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash popВозьмите хеш из git log и добавьте --no-edit, чтобы пропустить редактор сообщения. git stash pop возвращает «readme» и оставляет «before undo» в списке. Теперь git status показывает только README.md, а git log --oneline показывает сверху Revert "Update lockfile".
Если коммит уже отправлен в удалённый репозиторий, используйте revert, а не git reset: reset переписывает историю, которая у других уже может быть. Если после reset или rebase коммит кажется потерянным, git reflog покажет коммиты, на которых вы недавно были, с их хешами.
6. Используйте контрольные точки агента, а Git держите в запасе
Claude Code сохраняет контрольную точку перед каждым запросом: выполните /rewind или дважды нажмите Esc при пустом поле ввода, чтобы восстановить код, беседу или и то и другое. В его документации о контрольных точках перечислены ограничения: изменения, сделанные командами оболочки, не отслеживаются, внешние правки обычно не фиксируются, а контрольные точки не заменяют систему контроля версий. Доступность этой функции также зависит от приложения, в котором вы запускаете агента.
Поэтому сделайте Git запасным вариантом:
- Делайте коммит или создавайте ветку перед каждой задачей, чтобы «последний коммит» означал «до агента».
- Скажите агенту не делать коммиты без спроса, например в файле AGENTS.md.
- Не отключайте запросы разрешений. Режим YOLO в Mono, который принимает любой запрос агента, по умолчанию выключен. Подробнее о том, что проверять, прежде чем дать разрешение.
В Mono карточка проекта открывает терминал в папке проекта на вашем компьютере, в том числе с телефона (см. руководство по удалённой работе с кодом). Mono пока недоступен, но вы можете записаться в список ожидания.
