Инструменты · 29 мин · обновлено 21 июля 2026 г.

Как откатить изменения в Claude Code: /rewind, git и 5 способов в 2026

Claude сломал код - откатись за секунды. Внутри сессии выручает /rewind, до коммита git checkout, после деструктивного reset --hard спасает git reflog. Разбираем все уровни отката, что /rewind не ловит, и как правилом в CLAUDE.md запретить Claude ронять проект.

Как откатить изменения в Claude Code: /rewind, git и 5 способов в 2026

Claude Code сломал тебе код - и это чинится за секунды, если знать, каким инструментом откатывать. Внутри сессии выручает встроенная команда /rewind: мгновенный возврат файлов и диалога к нужной точке. Если правки уже вышли за пределы сессии, откатывает git checkout до последнего коммита. А если кто-то снёс работу деструктивной командой, последняя страховка - git reflog, в нём остаются хэши даже уничтоженных коммитов.

Три уровня, и каждый ловит свой класс аварий. /rewind не заменяет git, git не заменяет reflog. Знать только /rewind - значит остаться без защиты в первый же серьёзный косяк, когда Claude тронет не только файлы. Ниже разберём каждый уровень со своими командами и ограничениями, покажем реальную историю потери четырёх часов работы и настроим проект так, чтобы откатывать было почти нечего.

Откат в Claude Code работает на трёх уровнях: `/rewind` (мгновенный возврат внутри сессии), `git checkout` (отмена незакоммиченных правок), `git reflog` (спасение после `git reset --hard`). Каждый уровень покрывает свой тип ошибки и ничего за своими границами. `/rewind` видит только правки Claude через его тулы, а bash, миграции БД и push не ловит. Лучшая привычка: `git commit` на каждой вехе и одно правило в `CLAUDE.md`, которое запрещает Claude выполнять разрушающие git-команды.

3уровня

отката: /rewind, git checkout, git reflog

100снимков

на сессию хранит /rewind, до 30 дней

6режимов

в меню отката, чаще берут Restore code and conversation

4часа

работы потерял разработчик из-за одной команды reset --hard

Что такое откат в Claude Code и почему трёх уровней мало

Откат тут устроен слоями, и это важно понять сразу, иначе будешь давить одну кнопку там, где нужна другая. Уровень первый - встроенный /rewind, возврат внутри текущей сессии. Уровень второй - git checkout, восстановление незакоммиченных правок средствами системы контроля версий. Уровень третий - git reflog, катастрофическая страховка на случай, если ветку переписали через git reset --hard.

Разберём на трёх типичных ситуациях, они хорошо показывают границы каждого уровня.

Возьмём эксперта, который включил /rewind в первую же неделю: Claude за пару промптов поломал auth-логику, человек откатился одним движением и пошёл дальше. Через месяц другая история - писал миграцию схемы, закоммитил, переключил ветку и понял, что забыл шаг. Тут /rewind уже бессилен, сессия другая. Спас git checkout на предыдущий коммит. Ещё через месяц он случайно дал агенту команду «откати всё к последнему пушу», агент выполнил git reset --hard и снёс три часа работы. Вытащил только git reflog, в нём остались хэши уничтоженных коммитов.

Три ситуации - три уровня защиты. Работают по-разному, ловят разные ошибки, и нужны все три.

Снимки для `/rewind` инкрементальные: Claude запоминает разницу между состояниями файлов, а не файл целиком. По умолчанию хранится до 100 снимков на сессию до 30 дней. В большинстве реальных проектов это значит полную историю правок Claude за весь рабочий день.

Вот три уровня одной таблицей: что покрывает каждый и чего не умеет.

УровеньКомандаПокрываетНЕ покрывает
1. Внутри сессии/rewind или Esc EscФайлы, изменённые Claude через свои тулы; историю диалогаBash-команды, внешние редакторы, миграции БД
2. До коммитаgit checkout . или git stashВсе незакоммиченные правки в файлахЗакоммиченные коммиты
3. Катастрофаgit reflog + git reset --hard <hash>Коммиты, снесённые reset —hard или force-pushДеструктивные bash-команды (rm, миграции БД)

Дальше по каждому уровню отдельно: что именно делать, где подводные камни и как настроить проект, чтобы откатываться было нечего, потому что ничего не сломалось.

Как вызвать /rewind в Claude Code: команда или Esc Esc

Открыть меню отката можно двумя способами. Первый - напечатать /rewind в поле ввода. Второй - дважды нажать Esc, когда поле пустое. Если в поле уже есть текст, первое двойное Esc сначала очистит его и сохранит в историю, а меню откроет только повторное двойное нажатие. У команды /rewind есть алиас /checkpoint, он ведёт туда же.

Работает это потому, что после каждого своего ответа Claude автоматически делает снимок всех файлов, которые редактировал в этой сессии. Снимки лежат в ~/.claude/file-history/{sessionId}/ и держатся до 30 дней. Ты в любой момент можешь отмотать на любую точку своего рабочего дня.

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

[поле ввода пустое]
> _

[нажми Esc, Esc]

Rewind to which message?
  1. Сделай миграцию для User-таблицы          (3 файла изменены)
  2. Добавь поле lastLoginAt                    (1 файл изменён)
  3. Перепиши логику авторизации                (5 файлов изменены)
  ...

Момент про непустое поле полезен на практике: ты уже начал печатать новый промпт и вдруг понял, что надо откатиться. Жмёшь Esc Esc, текст улетает в историю ввода, повторное Esc Esc открывает меню. После отката вернёшь набранное стрелкой вверх. Так это описано в официальной документации Anthropic.

Если в поле prompt есть текст, двойной Esc сначала очистит его, а не откроет меню. Очищенный текст сохраняется в истории ввода, поэтому после меню отката его можно вернуть стрелкой вверх.

- Anthropic Docs, Checkpointing

Какой способ удобнее - дело привычки. Печатать /rewind нагляднее, если ты забыл про хоткей. Esc Esc быстрее, руки не уходят с клавиатуры.

Какие 6 режимов есть в Rewind-меню и какой выбрать

Выбрал точку отката - открывается второе меню, уже с шестью режимами. Три отвечают за восстановление состояния, два за сжатие истории, один просто закрывает меню. Самый частый режим - Restore code and conversation, вернуть и файлы, и диалог. Его и берёшь в девяти случаях из десяти.

Полная таблица, что делает каждый режим и когда он твой:

РежимЧто делаетКогда выбирать
Restore code and conversationВозвращает и файлы, и историю диалога к выбранной точкеСамый частый сценарий: Claude пошёл не туда, хочешь начать заново с правильной формулировкой
Restore conversationОткатывает только диалог, файлы остаются как сейчасКод хороший, но беседа уехала в сторону; переформулируешь с этой точки, а текущие правки сохранишь
Restore codeОткатывает файлы, беседа остаётся как естьЧасть правок Claude была лишней, но контекст разговора ещё нужен (например, договорились о следующих шагах)
Summarize from hereСжимает в сводку всё ПОСЛЕ выбранной точки, файлы не трогаетДолгая отладка съела контекст, надо освободить место, но начальные инструкции оставить целиком
Summarize up to hereСжимает в сводку всё ДО выбранной точки, файлы не трогаетБыл длинный стартовый брифинг, потом конкретная задача: брифинг сжимаешь в одно сообщение, недавнюю работу оставляешь
Never mindЗакрывает меню без измененийПередумал

Режим Summarize up to here появился в Claude Code v2.1.139-v2.1.142, релиз пришёлся на 11-15 мая 2026, двадцатую неделю года.

Через меню отката можно сжать ранний контекст пунктом Summarize up to here.

- Anthropic What's new, Changelog

Разница между Restore и Summarize принципиальная, её стоит держать в голове. Restore возвращает состояние, то есть отменяет всё, что случилось после выбранной точки. Summarize ничего не отменяет, он только сжимает: оригинальные сообщения остаются в транскрипте сессии для справки, но в активном контексте живёт лишь сводка. Restore бери, когда хочешь «как будто этого вообще не было». Summarize - когда нужно «оставить, но не занимать место в контексте».

После `Restore conversation` или `Summarize from here` исходный текст выбранного промпта возвращается в поле ввода - можешь поправить формулировку и отправить заново. После `Summarize up to here` поле пустое, и ты остаёшься в конце разговора. Мелочь, но экономит время: не надо перепечатывать промпт, который почти подошёл.

Если хочешь глубже разобраться, как режимы отката вписаны в общую иерархию управления Claude Code, посмотри разбор 7 уровней Claude Code.

Какие изменения /rewind не откатывает

Это главная ловушка, на которую натыкаются почти все. /rewind отслеживает только правки, сделанные Claude через его собственные тулы редактирования файлов. Всё остальное он не видит и вернуть не может. Три класса невидимых изменений: bash-команды (rm, mv, cp), внешние правки (твоя ручная правка в IDE, правки от других сессий) и операции за пределами файлов (миграции БД, push в git, удалённые вызовы API).

Выглядит это коварно: /rewind показывает зелёную галочку и рапортует «откат успешен», а проект всё равно сломан, потому что Claude трогал не только файлы. Разберём три случая по очереди.

Что /rewind вернёт

  • файлы, которые Claude правил своими тулами редактирования
  • историю диалога к выбранной точке
  • состояние в пределах текущей сессии, до 30 дней назад

Что /rewind НЕ вернёт

  • bash-команды Claude: rm, mv, cp
  • твои ручные правки в IDE и правки от других сессий
  • миграции БД, git push, удалённые вызовы API

1. Bash-команды не отслеживаются. Если Claude в своём ходе выполнил rm file.txt или mv old.txt new.txt, эти изменения в снимок не попадут. Документация Anthropic говорит об этом прямым текстом.

Контрольные точки не отслеживают файлы, изменённые через bash-команды. Например, если Claude Code запустит rm file.txt, mv old.txt new.txt, cp source.txt dest.txt - эти изменения файлов через откат вернуть нельзя.

- Anthropic Docs, Checkpointing

То есть если Claude по своей инициативе через bash-тул удалил, переместил или скопировал файл, /rewind назад всё не откатит. Спасёт git checkout или восстановление из бэкапа, но это уже не нажатие двух кнопок.

2. Внешние правки не ловятся. Открыл файл руками в VS Code и что-то поправил, или вторая сессия Claude параллельно меняла те же файлы - первая сессия этих изменений не видит. Снимок сделан на момент завершения хода Claude в текущей сессии. Что произошло между ходами, снаружи его зоны ответственности.

3. Операции вне файлов не охватываются совсем. Миграция Prisma через npx prisma migrate dev изменила схему базы - /rewind её не откатит, потому что база живёт за пределами файловой системы проекта. Force-push в origin/main - та же история: коммит уехал на удалённый сервер, контрольная точка его не вернёт. Удалённый вызов API, который списал деньги или удалил запись, откатывается только средствами самого API.

Правило, которое бережёт нервы: если задача затрагивает что-то за пределами файлов проекта - миграции БД, `git push`, удалённые API - готовь отдельную стратегию отката под каждый внешний эффект. `/rewind` это только локальная история файлов текущей сессии. Он честно говорит «готово», но за границы файлов не отвечает, и проект после его галочки бывает всё ещё сломан.

/rewind vs git: чем отличаются и зачем нужны оба

/rewind - это локальный откат внутри одной сессии Claude Code. Хранит снимки до 30 дней, до 100 на сессию, инкрементально. Git - долгосрочная история всего проекта: коммиты, ветки, merge-конфликты, удалённый репозиторий, общий для команды. Один не заменяет другой. Практика простая: делаешь git commit на каждой логической вехе, а между коммитами полагаешься на /rewind.

В документации Anthropic эта связка зафиксирована прямо.

Контрольные точки сделаны для быстрого восстановления на уровне сессии. Для коммитов, веток и долгой истории продолжай пользоваться системой контроля версий (например, Git). Они дополняют, но не заменяют нормальный version control. Думай о контрольных точках как о local undo, а о Git как о permanent history.

- Anthropic Docs, Checkpointing

Страница документации Claude Code про Checkpointing: раздел Limitations с пунктами Bash command changes not tracked и Not a replacement for version control
Официальная документация Claude Code про контрольные точки. В блоке Limitations справа прямым текстом: bash-команды не отслеживаются, внешние правки не отслеживаются, откат не заменяет систему контроля версий. Тут же подтверждение: снимки хранятся для 100 последних контрольных точек сессии (скриншот 22.07.2026)

Различия удобнее смотреть в таблице:

Параметр/rewindgit
ГранулярностьНа каждый ход в диалогеНа каждый коммит
ХранениеДо 30 дней, до 100 на сессию, локально в ~/.claude/file-history/Постоянно, в .git/ репозитория и на удалённом сервере
Что отслеживаетПравки Claude через свои тулыВсе закоммиченные изменения
Что НЕ отслеживаетBash, внешние правки, миграции, pushНезакоммиченные изменения
КомандаКоманда внутри ClaudeВнешняя система контроля версий
Откатывает беседуДаНет
Работает между сессиямиТолько в той же сессииВезде

Связка на практике такая. Каждый раз, когда дошёл до состояния «вот это уже работает, терять не хочу», делаешь git commit. Между коммитами полагаешься на /rewind: он мгновенный, не требует писать сообщение, не засоряет git-историю промежуточными состояниями. Работа закончена - коммит, желательно осмысленный и атомарный.

Откат - это частный случай контекст-инжиниринга. Когда ты управляешь контекстом сессии (когда коммитить, когда жать /rewind, какие правила в CLAUDE.md), Claude становится предсказуемым и перестаёт ронять проект. Сам по себе навык узкий: уметь вернуть состояние, когда оно сломалось. Но в связке с планированием и правилами проекта он даёт стабильную работу вместо ежедневной борьбы с галлюцинациями.

Откат - лишь один кирпич из системы, которая делает Claude предсказуемым. Пройди мини-курс «Claude за вечер»: от установки до первых результатов на твоих задачах, чтобы собрать вокруг Claude рабочий процесс, где откатывать почти не приходится.

Пройти мини-курс →

Как разработчик потерял 4 часа из-за git reset —hard

Показательная история, задокументированная в трекере Claude Code. 9 января 2026 разработчик Jeff Kelling попросил Claude Code «сохранить текущее состояние и откатиться к последнему пушу». Claude сделал git stash (правильно), а следом git reset --hard 35eb731 (деструктивно). Около четырёх часов работы исчезли. Три урока из этого: «откатить» в естественном языке означает «посмотреть историю», а не «уничтожить её»; Claude по умолчанию должен предлагать git checkout, а не reset --hard; защита ставится в CLAUDE.md.

Случай зафиксирован в GitHub Issue #17190 репозитория anthropics/claude-code, закрыт как дубликат, но описан подробно. Версия Claude Sonnet 4.5, формулировка пользователя была такой:

GitHub Issue 17190 в репозитории anthropics/claude-code: баг про то, как Claude Code выполнил git reset --hard вместо безопасного git checkout
Тот самый баг-репорт на GitHub: заголовок «Claude Code uses destructive git reset --hard instead of safe git checkout for rollback requests», статус Closed as duplicate, репортёр Jeff Kelling, версия Claude Sonnet 4.5. Внизу видна фраза пользователя «ROLL BACK to the last push» (скриншот 22.07.2026)

Хочу сохранить, где мы сейчас, и ОТКАТИТЬСЯ к последнему push.

- Jeff Kelling, GitHub Issue #17190

Claude выполнил последовательно две команды:

git stash save "WIP: Tracker enter/leave disabled + fsSyncModule fix"  # сохранил незакоммиченные правки
git reset --hard 35eb731                                                # уничтожил коммиты d63695e..882e618

Первая команда правильная, она спрятала незакоммиченные изменения в stash. Вторая деструктивная: переписала ветку на коммит 35eb731, и все коммиты между ним и 882e618 стали orphaned, сиротами. По умолчанию такие коммиты живут в .git/objects/ до запуска git gc, который обычно срабатывает автоматически в течение двух недель. Но если в этот момент ты не знаешь, что делать, время работает против тебя.

Главный урок сам пострадавший сформулировал в комментарии к issue:

НИКОГДА не используй git reset —hard, пока я явно не произнесу именно эти слова.

- Jeff Kelling, GitHub Issue #17190

Логика тут прямая. В живой речи «roll back», «go back», «restore», «revert», «undo» значат «посмотреть назад» или «вернуться в безопасное место». Они не про уничтожение истории. А git reset --hard именно уничтожает: переписывает ветку и убирает коммиты из достижимых через HEAD. Безопасная альтернатива - git checkout <commit>, она создаёт detached HEAD и даёт посмотреть старое состояние, не трогая ветки.

Практический вывод один: перед любой ёмкой задачей, особенно перед рефакторингом нескольких файлов, делай git commit текущего состояния. Один коммит превращает любой косяк Claude в одну команду git checkout . без потери работы.

Как git reflog спасает после деструктивного reset

git reflog показывает локальную историю всех движений HEAD в репозитории, включая те коммиты, которые снесли через git reset --hard или force-push. Каждое движение хранится 90 дней по умолчанию. Если Claude (или ты сам, или коллега) уничтожил коммиты деструктивной командой, git reflog покажет их хэши, и ты восстановишь ветку через git reset --hard <reflog-hash>.

Сколько дней есть на восстановление

Снимки /rewind в сессии
30
Записи git reflog
90

История из прошлого раздела закончилась бы хорошо, запусти Jeff git reflog сразу:

git reflog

Вывод выглядит примерно так:

35eb731 HEAD@{0}: reset: moving to 35eb731
882e618 HEAD@{1}: commit: middleware refactoring complete
d63695e HEAD@{2}: commit: leaveRemove method finalized
1f9c8a3 HEAD@{3}: commit: tracker enter/leave disabled
35eb731 HEAD@{4}: pull origin main

Строки HEAD@{1} - HEAD@{3} и есть те самые «уничтоженные» коммиты. Из локального хранилища объектов git они никуда не делись, просто стали недоступны через ветку. Чтобы вернуть:

# Создать ветку из последнего «уничтоженного» коммита
git branch recovered-work 882e618

# Или переключиться напрямую
git reset --hard 882e618

После этого ветка снова содержит всю историю до катастрофы.

У reflog есть ограничения, про которые стоит знать заранее:

Никогда не запускай `git gc --aggressive` сразу после катастрофы. Сначала разберись через reflog, восстанови ветку, и только потом всё остальное. И не удаляй локальный клон репозитория, пока не уверен, что всё нужное запушено, - вместе с папкой уйдёт единственный шанс на восстановление.

Как защитить проект от разрушающих git-команд через CLAUDE.md

В CLAUDE.md твоего проекта добавляешь блок с инструкцией: какие git-команды Claude может выполнять сам, какие требуют явного подтверждения, какие запрещены без точной фразы. Claude уважает CLAUDE.md как системный промпт проекта и по умолчанию этим правилам следует. Один такой блок превращает опасный промпт «откати всё» в две безопасных команды с вопросом к тебе.

Корень проблемы из issue #17190 в том, что у Claude по умолчанию нет защитного контекста. Он трактует «roll back» как git reset --hard, потому что технически это валидный способ. Защиту мы переносим в CLAUDE.md, файл с системным промптом проекта.

Минимальное правило, вставляешь в свой CLAUDE.md:

## Git Safety Protocol
 
- NEVER run destructive git commands (push --force, reset --hard, checkout ., restore ., clean -f, branch -D) unless I explicitly request these actions. Taking unauthorized destructive actions is unhelpful and can result in lost work.
- When I say "roll back", "go back", "restore", "revert", "undo" - interpret as REVIEW commands: use `git log`, `git diff`, `git checkout <commit>` (creates detached HEAD), or `git stash` (preserves changes).
- ALWAYS ask for confirmation before ANY command that:
  - Changes HEAD position to a different commit on a branch
  - Modifies commit history
  - Could lose uncommitted work
  - Includes flags --hard, --force, --aggressive
- Before any destructive command, output a numbered comparison:
  - SAFE: use `git checkout <commit>` to view temporarily
  - DESTRUCTIVE: use `git reset --hard` to permanently destroy
- Wait for my explicit choice before executing.

Расширенное правило для командной работы, добавляешь в CLAUDE.md корня репозитория:

## Git Workflow Rules
 
- Commit на каждой логической вехе. Если задача длиннее 30 минут и ты ещё не коммитил - сначала `git add . && git commit -m "wip: [что сделано]"`, потом следующий шаг.
- Никогда `git add .` или `git add -A` для коммитов от Claude. Только конкретные файлы по имени, после `git status` и `git diff`.
- Перед `git push --force` в main - стоп, спроси меня. В feature-ветках force-push с осторожностью, только если уверен, что я готов потерять предыдущую версию.
- При merge-конфликтах никогда не выбирай "ours" или "theirs" сразу - сначала покажи мне обе версии, потом я решу.
- `.gitignore` обязан содержать `.env*`, `.claude/personal/`, `node_modules/`, `dist/`. Если их нет - добавь.

После этих блоков следующая фраза «откати к последнему пушу» приведёт уже к другому ответу Claude:

Вижу 3 незакоммиченных файла и 4 коммита впереди последнего пуша. Два варианта. SAFE: создать ветку view-last-push через git checkout последнего пуш-хэша, сохраню всю работу и временно покажу состояние пуша. DESTRUCTIVE: git reset —hard на этот хэш, уничтожу 4 коммита и незакоммиченные правки навсегда, восстановить можно будет только через git reflog в течение 90 дней. Что выбираешь?

Полминуты диалога вместо четырёх часов потерянной работы. Про то, как CLAUDE.md вообще устроен и что ещё в него зашивают, есть отдельный разбор про каркас проекта для вайб-кодинга.

Какие 5 способов отката есть в Claude Code и как выбрать нужный

Когда что-то пошло не так, у тебя пять уровней отчаяния: /rewind (внутри сессии), git checkout . (незакоммиченные правки), git checkout <commit> (вернуться на старый коммит без потери истории), git reset --hard <commit> (вернуть ветку, потеряв коммиты впереди), git reflog с восстановлением (катастрофа, всё пропало). Каждый следующий уровень тяжелее и опаснее предыдущего.

Сценарий «Claude сломал, надо срочно вернуть» проходят снизу вверх по этой лестнице. Начинай всегда с первого уровня.

Уровень 1. /rewind - мгновенный откат внутри сессии. Жми Esc Esc или печатай /rewind. Выбирай точку до момента слома, выбирай режим (обычно Restore code and conversation). Через секунду ты в прошлом и можешь начать заново. Закрывает 80% случаев «Claude сделал не то».

Уровень 2. git checkout . - отмена всех незакоммиченных правок.

git diff                          # сначала посмотри, что вообще изменилось
git checkout .                    # отменить все незакоммиченные правки во всех файлах
# или избирательно:
git checkout -- path/to/file.ts   # только один файл

Полезно, когда /rewind не сработал (Claude трогал файлы через bash) или когда нужна отмена в обход истории сессии. Все незакоммиченные изменения исчезнут безвозвратно. Жалко - сначала git stash.

Уровень 2.5. git stash - сохранить правки на полку.

git stash save "может, ещё понадобится"
# вернуться к чистому состоянию, поработать
# передумал - вернуть из stash:
git stash pop

Компромисс между «потерять навсегда» и «оставить как есть». Stash живёт локально до явной чистки.

Уровень 3. git checkout <commit> - вернуться на старый коммит без потери истории.

git log --oneline               # найди хэш нужного коммита, например abc1234
git checkout abc1234            # detached HEAD - смотришь, ничего не меняешь
# понравилось состояние - создай ветку из него:
git checkout -b recovery abc1234
# вернуться обратно:
git checkout main

Безопасный «временный возврат». Detached HEAD не меняет ветку, текущая работа в main остаётся целой. Хочешь поработать с этим состоянием - делай ветку.

Уровень 4. git reset --hard <commit> - вернуть ветку на точку. Деструктивно, коммиты впереди указанного хэша станут orphaned.

git reflog                       # запомни хэш текущего состояния
git reset --hard abc1234         # переписать ветку
# обнаружил ошибку - вернись через reflog:
git reset --hard HEAD@{1}        # туда, где был до reset

Используй только если уверен, что коммиты впереди тебе не нужны. И всегда смотри git reflog ДО reset, чтобы знать, куда возвращаться, если передумаешь.

Уровень 5. git reflog с восстановлением - катастрофический сценарий. Кто-то уже снёс работу через git reset --hard или force-push.

git reflog                                 # ищи последний хэш до катастрофы
git branch recovered HEAD@{N}              # создай ветку оттуда
git checkout recovered                     # переключись
git diff main                              # сверь с текущим состоянием
git checkout main && git merge recovered   # вернуть в main, если уверен

Если reflog уже почистился (90 дней по умолчанию), последний шанс - git fsck --lost-found, он покажет «болтающиеся» коммиты в .git/objects/. Почти археология, но иногда выручает.

Таблица выбора уровня, чтобы не думать в панике:

Что произошлоУровень
Claude переписал 3 файла не туда1. /rewind
Попробовал, не нравится, сессия не помогает2. git checkout .
Сломал руками, жаль терять, может верну2.5. git stash
Закоммитил, надо вернуть на коммит назад3. git checkout <commit>
Уверен, что коммиты впереди не нужны4. git reset --hard
Уже снёс деструктивной командой5. git reflog

Как защитить проект, чтобы откатывать было нечего

Лучший откат - тот, который не понадобился. Три базовых правила защиты: коммит каждые 30 минут даже на черновом коде; .gitignore с обязательными строками для .claude/personal/ и .env*; крупные эксперименты в отдельной ветке через git checkout -b. С такой настройкой даже катастрофическая ошибка Claude обойдётся максимум в полчаса потерянной работы.

Правило 1. Коммит каждые 30 минут. Не жди «когда задача готова». Любой промежуточный шаг, который работает, коммитится. Сообщения могут быть любыми, главное - чтобы ты (или Claude) мог откатиться на рабочее состояние одним git checkout.

# в начале задачи
git status                        # проверь, что нет лишнего
git add .
git commit -m "wip: начинаю миграцию схемы User"

# через 30 минут или после первой рабочей итерации
git add .
git commit -m "wip: User-схема готова, миграция применена локально"

# в конце задачи - осмысленный коммит
git reset --soft HEAD~2           # объединить wip-коммиты в один
git commit -m "feat(auth): добавлено поле lastLoginAt в User-таблицу"

Это можно даже автоматизировать хуком Claude Code: в .claude/settings.json добавляешь PostToolUse-хук, который раз в N минут делает авто-коммит.

Правило 2. .gitignore минимум. В корне проекта обязательны строки:

# секреты
.env
.env.local
.env.*.local

# локальные настройки Claude Code (не пушим в командный репозиторий)
.claude/personal/
.claude/sessions/
.claude/file-history/

# зависимости и сборка
node_modules/
dist/
.next/
build/

Папку .claude/personal/ держишь для своих экспериментов и заметок, которым не место в общем репо. .claude/sessions/ и .claude/file-history/ - локальное хранилище Claude Code, оно много весит и привязано к конкретной машине, в репозитории ему делать нечего.

Правило 3. Эксперименты в отдельной ветке. Задача большая (рефакторинг на 10+ файлов, миграция на новую базу, переписывание модуля) - не делай её в основной ветке.

git checkout -b experiment/auth-rewrite
# работаешь, коммитишь каждые 30 минут
# получилось:
git checkout main
git merge experiment/auth-rewrite
# не получилось:
git checkout main
git branch -D experiment/auth-rewrite     # удалить ветку
# основная ветка целая

Эта привычка превращает «Claude разнёс проект» в «Claude разнёс одну ветку, я её удалил, начинаем заново».

Правило про запас: перед опасными операциями ставь тег. Перед миграцией БД, массовым рефакторингом или обновлением зависимостей - `git tag pre-prisma-migration-v2`. Тег это именованный указатель на коммит, который переживёт даже чистку reflog. Что-то пошло не так - `git reset --hard pre-prisma-migration-v2` или просто `git checkout` на тег, чтобы посмотреть.

Куда откат встроен: план, правила и память проекта

Откат - не отдельный трюк, а часть управления контекстом сессии Claude Code. Когда ты знаешь, когда жать /rewind, когда git commit, когда git stash, ты управляешь целым потоком работы, а не одной командой. И тогда откатываться приходится редко, потому что рядом стоят ещё четыре рубежа защиты.

Первый рубеж - Plan Mode. Он не даёт сразу писать код: сначала план, потом твоё подтверждение, потом исполнение. Это превентивный откат, ты просто не пишешь то, что придётся откатывать, потому что план просмотрен заранее.

Второй - CLAUDE.md с правилами, которые Claude уважает по умолчанию, включая тот самый Git Safety Protocol. Превентивная защита от деструктивных команд.

Третий - память проекта между сессиями: Claude знает твой код, твою бизнес-логику, прежние договорённости. Чем больше памяти, тем меньше шансов, что он сделает не то.

Четвёртый - скиллы и субагенты, твоя методология в коде. Если в скилл зашит правильный git-workflow, ни один субагент не выполнит git reset --hard без подтверждения.

Формула безопасного отката: Plan Mode (не пишем лишнего) + `CLAUDE.md` с git-правилами (не разрешаем деструктив) + память проекта (Claude понимает контекст) + `git commit` на каждой вехе. Когда эти четыре настроены, откат становится редким и быстрым. Когда нет - превращается в ежедневный ритуал.

Если ты только начинаешь и хочешь поставить всё это с чистого листа, разбор Claude Code с нуля из России проведёт от установки до первого рабочего проекта.

Чек-лист: что у тебя теперь есть

Рассылка

Подпишись на еженедельную рассылку

Полезные материалы и скиллы, которые усилят твою работу с нейросетями и помогут больше зарабатывать. Раз в неделю, без воды и спама.

Частые вопросы

Как быстро откатить изменения в Claude Code?

Нажми Esc дважды при пустом поле ввода или напечатай /rewind. Откроется меню контрольных точек. Выбери сообщение до момента слома, режим Restore code and conversation - и файлы с диалогом вернутся к тому состоянию. Это мгновенно, ничего в терминал вбивать не нужно. Покрывает почти все случаи, когда Claude пошёл не туда.

Какие изменения /rewind не откатывает?

Только то, что Claude правил своими тулами редактирования файлов. Bash-команды (rm, mv, cp), твои ручные правки в IDE, правки от параллельных сессий, миграции базы данных, git push, удалённые вызовы API - всё это /rewind не видит и не вернёт. По документации Anthropic контрольные точки не отслеживают файлы, изменённые через bash. Для такого нужен git или отдельная стратегия отката.

Чем /rewind отличается от git?

/rewind - это локальный откат внутри одной сессии Claude Code: снимки хранятся до 30 дней, до 100 на сессию, умеет вернуть и код, и диалог. Git - долгосрочная история проекта с коммитами, ветками и удалённым репозиторием, общая для команды. Одно не заменяет другое. Практика: git commit на каждой рабочей вехе, между коммитами полагаешься на /rewind.

Как восстановить коммиты после git reset --hard?

Запусти git reflog - он показывает все движения HEAD, включая коммиты, снесённые деструктивной командой. Найди хэш последнего состояния до катастрофы и восстанови ветку: git branch recovered <hash> или git reset --hard <hash>. Reflog хранит записи 90 дней по умолчанию. Работает только локально, на удалённом репозитории reflog нет.

Как запретить Claude выполнять git reset --hard?

Добавь в CLAUDE.md блок Git Safety Protocol: запрет на деструктивные команды (reset --hard, push --force, clean -f) без твоей явной фразы, и правило трактовать слова откатись, верни, отмени как команды просмотра (git log, git diff, git checkout). Claude уважает CLAUDE.md как системный промпт проекта и по умолчанию следует этим правилам.

Мини-курс «Claude за вечер»

За один вечер настроишь Claude под свои задачи: внутри 35+ промптов, скиллов и агентов. Гарантия возврата 7 дней. Дальше есть Лаборатория ИИ-маркетинга, где из нейросети собирается целый отдел маркетинга.

Пройти мини-курс