Перейти к содержимому

Снимки и откат

Снимки позволяют откатить последние изменения переписки и файлов одним действием. Это удобно для правки свежей работы; для важного полагайтесь на git-коммиты или резервные копии.

Выполните /undo после ответа, который хотите переписать. ZubrCode готовит откат, восстанавливает затронутые файлы и возвращает убранный запрос в поле ввода — поправьте и отправьте снова.

/undo
# Поправьте возвращённый запрос и отправьте его снова.
Добавь валидацию, не меняя публичный API.

Отправка запускает подготовленный откат. До отправки /redo отменяет его и возвращает переписку и файлы к состоянию до /undo. В терминале те же действия по умолчанию на Ctrl+X U и Ctrl+X R. Можно выбрать более раннее сообщение и нажать Revert — откат будет подготовлен до него.

На каждом шаге модели ZubrCode пытается сделать снимок непосредственно перед запросом к модели и ещё один, когда шаг завершился; сообщение ассистента запоминает, какие пути между снимками изменились. Снятие best-effort: если снимок недоступен, разговор продолжается, но этот шаг может не иметь восстанавливаемых правок.

Снимки охватывают активную папку сессии внутри git-рабочей копии: сессия в packages/app снимает файлы под packages/app, но не изменения в остальной части репозитория.

Содержимое Снимок Пример
Отслеживаемые файлы активной папки да packages/app/src/app.tsx
Неигнорируемые новые файлы до 2 МиБ да packages/app/notes.txt
Файлы из .gitignore нет packages/app/dist/app.js
Новые файлы больше 2 МиБ нет packages/app/debug.log
Файлы вне активной папки нет packages/server/src/index.ts
Git-метаданные и побочные эффекты нет коммиты, ветки, базы, процессы

Для файловых снимков нужен git-репозиторий: вне его /undo откатывает переписку, но не восстанавливает файлы.

Откат возвращает только пути, приписанные шагам ассистента после выбранной границы: каждый путь возвращается к состоянию до первого откатываемого шага, а созданный этими шагами файл удаляется, если его тогда не было. Остальные пути не трогаются. Текущие правки затронутых путей могут быть перезаписаны — посмотрите восстановленное резюме и git diff перед продолжением.

Снимки лежат локально, в отдельной внутренней git-базе объектов под каталогом данных; для вашего репозитория это не создаёт коммитов и не двигает ветки. Объекты снимков могут содержать полное содержимое отслеживаемых файлов — относитесь к каталогу данных как к чувствительным данным.

Снимки включены по умолчанию. Выключить будущее снятие файлов:

opencode.jsonc
{
"snapshots": false
}

Выключение не удаляет уже сохранённые снимки: откат переписки остаётся, но без снятого состояния файлов не восстанавливает правки.

Снимки — удобство, а не транзакция и не резервная копия:

  • Команды оболочки могут менять сервисы, процессы, сеть, базы, git и файлы вне активной папки — восстановление снимка этих эффектов не отменяет.
  • Прерванная или неудавшаяся работа может оставить правки, если снятие не удалось или пары снимков нет.
  • Восстановление перезаписывает текущее содержимое затронутых путей; отмена подготовленного отката тоже может перезаписать более поздние правки.
  • Откат убирает сообщения из активного вида переписки, а не из истории сессии и хранилища снимков — это не стирание данных.

Перед /undo на «грязной» рабочей копии закоммитьте или сохраните важную работу.