主题
检查点与回溯(/rewind)
Claude Code 自动记录每次文件编辑前的代码状态,通过 /rewind(或空输入时连按两次 Esc)可回溯代码、对话或两者,并支持对会话做定向压缩总结。
对你意味着什么
你 bypassPermissions、改动飞快——checkpoint 就是你最主要的"后悔药":每条 prompt 自动建检查点,改坏了能回。
| 想干什么 | 怎么做 |
|---|---|
| 回退代码/对话/两者 | 双击 Esc 或 /rewind,菜单选 Restore code / conversation / both |
| 从某轮重新摘要继续 | /rewind 选 Summarize from/up to here |
| 大胆试风险方案 | 先记住能 /rewind,放手改 |
| 跨会话分叉 | claude --continue --fork-session |
注意边界:Bash 的
rm/mv/cp等不被 checkpoint 追踪(只追踪 Claude 的文件编辑工具)。你那些真正危险的删除/移动还是得靠 hook 或 git 兜底,别指望/rewind撤回。
官方文档要点
以下为按官方文档整理的系统性参考。
是什么
Checkpointing(检查点)是 Claude Code 的内置安全网:在你与 Claude 工作过程中,它会在每次编辑前自动捕获代码状态,让你能快速撤销改动、回到之前的状态。它支持 restore(回退代码/对话/两者)和 summarize(把会话的某一侧压缩成 AI 生成的摘要以释放上下文窗口)两类操作。官方明确定位它是"会话级的本地 undo",用来补充而非替代 Git 这类版本控制("local undo" vs "permanent history")。
怎么工作
- 自动追踪:Claude Code 追踪它的文件编辑工具(file editing tools)所做的全部改动;每一条用户 prompt 都会创建一个新的 checkpoint。
- 跨会话持久化:checkpoint 在会话之间保留,恢复(resumed)对话时仍可访问。
- 自动清理:checkpoint 随会话在 30 天后被自动清理(30 days,可配置 configurable)。
- 打开回溯菜单:运行 /rewind,或在输入框为空时连按两次 Esc(press Esc twice)即可打开 rewind 菜单。
- Esc 行为分支:若输入框中已有文字,连按两次 Esc 会清空文字而不是打开菜单;被清空的文字会存入 input history,之后按 Up 可召回。
- 菜单列出本次会话发送过的每条 prompt,选中某点后可选 6 个动作之一。
- Restore 是回退状态(撤销代码/对话历史/两者);Summarize 是把对话的一侧压缩成 AI 生成的摘要,不改动磁盘文件。
- Restore conversation 或 Summarize from here 之后,所选消息的原始 prompt 会被还原到输入框,便于重发或编辑;Summarize up to here 之后停在对话末尾且输入框为空。
- Summarize 后原始消息仍保留在 session transcript 中,Claude 需要时仍可引用细节;可输入可选指令来引导摘要聚焦点。
怎么配置 / 用法
触发方式(无需配置文件即可用):
- 命令:
/rewind - 快捷键:输入框为空时连按两次
Esc(输入框有文字时Esc Esc改为清空文字,文字进 input history,按Up召回)
rewind 菜单中的 6 个动作:
Restore code and conversation:同时回退代码与对话到该点Restore conversation:回退到该消息,但保留当前代码Restore code:回退文件改动,但保留对话Summarize from here:把所选消息及其之后的内容压成摘要(之前的消息保持完整)Summarize up to here:把所选消息之前的内容压成摘要(所选消息及之后保持完整,并停在对话末尾)Never mind:返回消息列表,不做任何改动
保留期:随会话 30 天后自动清理,可配置(configurable)。
需要"另起分支试不同方案、且保留原会话不变"时,用 fork 而非 summarize:claude --continue --fork-session。
什么时候用
- 探索替代方案(Exploring alternatives):尝试不同实现而不丢失起点。
- 从错误中恢复(Recovering from mistakes):快速撤销引入 bug 或破坏功能的改动。
- 迭代功能(Iterating on features):在可随时回退到可用状态的前提下试验各种变体。
- 释放上下文空间(Freeing context space):从中点往后压缩冗长的调试会话,同时保留最初的指令。
- 别用它替代版本控制:永久历史与协作仍用 Git(commit/branch/长期历史)。
- 想保留原会话、另开分支试新思路时别用 summarize,改用 fork(claude --continue --fork-session)。
限制 / 坑
- 不追踪 bash 命令造成的文件改动:例如 Claude Code 运行
rm file.txt/mv old.txt new.txt/cp source.txt dest.txt这类,无法通过 rewind 撤销;只有通过 Claude 文件编辑工具直接做的编辑才被追踪。 - 不追踪外部改动:只追踪当前会话内编辑过的文件;你在 Claude Code 之外手动改文件、或其他并发会话的编辑,通常不会被捕获——除非它们恰好改到了当前会话编辑的同一批文件。
- 不是版本控制的替代品:checkpoint 面向快速的会话级恢复,定位为 'local undo',Git 才是 'permanent history',两者互补但不互相取代。
- 输入框有文字时连按两次 Esc 不会打开菜单,而是清空文字(需注意这一行为分支)。
- 保留期有限:checkpoint 随会话在 30 天后被自动清理。
硬事实速查(17 条)
- 命令:
/rewind打开 rewind 菜单。 - 快捷键:输入框为空时连按两次
Esc(press Esc twice)打开菜单。 - 输入框有文字时
Esc Esc= 清空文字,文字存入 input history,按Up召回。 - 触发粒度:每一条用户 prompt 创建一个新 checkpoint(Every user prompt creates a new checkpoint)。
- 追踪范围:仅追踪 Claude 的 file editing tools 所做的直接编辑。
- 持久化:checkpoint 跨会话保留,可在 resumed 对话中访问。
- 保留期:随会话 30 天(30 days)后自动清理,可配置(configurable)。
- 菜单 6 动作:Restore code and conversation / Restore conversation / Restore code / Summarize from here / Summarize up to here / Never mind。
- Summarize from here:所选消息及其之后 → 替换为摘要;之前消息保持完整。
- Summarize up to here:所选消息之前 → 替换为摘要;所选消息及之后保持完整,停在对话末尾、输入框为空。
- Restore conversation 或 Summarize from here 后,所选消息原始 prompt 还原到输入框。
- Summarize 后原始消息仍保留在 session transcript 中,可被 Claude 引用;支持输入可选指令引导摘要聚焦。
- Summarize 类比
/compact,但是定向(targeted):可选择压缩所选消息的哪一侧,而非压缩整段对话。 - bash 命令改动不可撤销,示例:
rm file.txt、mv old.txt new.txt、cp source.txt dest.txt。 - 外部/并发会话的改动通常不被捕获,除非改到当前会话编辑的同一批文件。
- 分支替代方案:
claude --continue --fork-session(fork,保留原会话不变)。 - 定位:checkpoints = 'local undo',Git = 'permanent history',互补不替代。