日期:2026-09-09 · 主题:checkpointing /
/rewind/ summarize-from-here 前置:第 9 课(上下文管理/clear/compact)、第 11 课(会话管理/fork--resume)、第 3 课(subagents)。 一句话:Claude Code 会在你每次发 prompt 之前给代码拍一张快照,/rewind就是那台时光机——但它有四个你必须知道的盲区。
技巧 1(入门):Esc Esc 打开 rewind 菜单,分清「回退代码」和「回退对话」
Claude Code 会自动为每个 user prompt 创建一个 checkpoint,不需要你做任何配置。打开方式两种:
/rewind # 或别名 /checkpoint
或者在输入框为空时连按两下 Esc。
⚠️ 注意:如果输入框里有文字,双击
Esc是清空输入框,不是打开菜单。被清掉的文字会进入输入历史,按↑可以召回。
菜单会列出本次会话你发过的每一条 prompt,选中一条后有六个动作:
| 动作 | 代码 | 对话 | 典型用途 |
|---|---|---|---|
| Restore code and conversation | 回退 | 回退 | 「这一整段都白干了」 |
| Restore conversation | 保留 | 回退 | 代码是对的,但对话跑偏了,想换个说法重来 |
| Restore code | 回退 | 保留 | 想让 Claude 记着刚才踩的坑,但文件先还原 |
| Summarize from here | — | 压缩此点之后 | 调试拉太长,把中段啰嗦压掉、保住最初的指令 |
| Summarize up to here | — | 压缩此点之前 | 前期背景已消化,压掉前面、保住近期消息 |
| Never mind | — | — | 退出 |
两个「restore code」选项只在该 checkpoint 之后确实有被追踪的文件改动时才出现。选完 Restore conversation 或 Summarize from here 后,那条原始 prompt 会被填回输入框,你可以直接改一改再发。
来源:Claude Code Docs · Checkpointing
技巧 2(进阶):把 Summarize from here 当成「定点 /compact」
/compact 是全局压缩,你无法控制它压哪一段。Summarize 是定点的,而且不改磁盘上的文件、原始消息仍留在会话 transcript 里(Claude 之后还能引用细节)。
实操:一次长调试跑完后,找到「开始瞎试」的那条 prompt,选 Summarize from here,把中段压成摘要,保留你最初那段写得很仔细的需求描述。
还能指定摘要重点:用方向键把光标停在某个 Summarize 选项上,那一行会显示 add context (optional),直接打字输入指示再回车。比如:
只保留失败原因和最终修复方案,丢掉所有尝试过程
注意:用数字键直接选中会立刻执行、不给你输入指示的机会,要输入指示必须用方向键高亮后再回车。
压缩完成后,对话里会留下一个 Summarized conversation 标记,标明被压掉的位置。
技巧 3(进阶):/clear 之后仍然能 rewind 回去
很多人以为 /clear 是不可逆的。其实只要还在同一个 Claude Code 进程里,/rewind 菜单顶部会多出一条:
/resume <session-id> (previous session)
选它就能回到 /clear 之前那段对话。限制:
- 需要 Claude Code v2.1.191 或更高;
- 一旦你退出 Claude Code 或 resume 了别的会话,这个入口就消失;
- 旧版本上,改用
/resume然后从列表里手动挑上一个会话。
配套认知:Summarize 是在原会话里压缩;如果你想分叉出去试另一条路、同时保住原会话完整,该用的是:
/branch
# 或者
claude --continue --fork-session
技巧 4(踩坑):四个 rewind 救不了你的盲区
这是本课最重要的部分。Checkpoint 只追踪 Claude 文件编辑工具做的改动,以下四类改不回来:
① bash 命令改的文件,一律不追踪。
rm file.txt # 回不来
mv old.txt new.txt # 回不来
cp source.txt dest.txt
对策:在 .claude/settings.json 里对破坏性命令设权限门禁,别让它无确认执行:
{
"permissions": {
"ask": ["Bash(rm:*)", "Bash(mv:*)", "Bash(git reset:*)"]
}
}
② subagent 的编辑,通常不在你会话的 checkpoint 里。
- 前台运行的 forked skill(
context: fork且background: false):在你自己的 turn 里改工作树,rewind 能还原; - 其它所有 subagent(包括默认后台运行的 forked skill、后台的
/code-review --fix):rewind 还原不了,只能用 git 回退。
③ 会话外的改动不追踪。 你自己在编辑器里手改的、或另一个并发 Claude Code 会话改的文件,除非恰好和当前会话改了同一批文件,否则不在快照里。
④ 软链接 / 硬链接路径不还原。 选 Restore code 时,Claude Code 会跳过所有是 symlink 或 hard link 的被追踪路径,并提示 Restored the code, but skipped N files,这些文件保持当前内容。dotfile 管理器软链进项目的配置文件、pnpm 硬链进来的文件都属于这一类。想看具体跳过了哪些路径,还原之前先开 /debug,日志在 ~/.claude/debug/<session-id>.txt。
另外两条保质期约束:
- 每个会话只保留最近 100 个 checkpoint 的文件快照;
- 会话最后一次保存快照后,默认约 30 天会被清理扫描删掉,之后 rewind 会报
No files were restored。想留更久,调cleanupPeriodDays:
{ "cleanupPeriodDays": 90 }
结论(官方原话立场):checkpoint 是会话级的快速恢复,不是版本控制的替代品。真正的护城河仍然是在让 Claude 动手之前先 commit 一次——rewind 负责分钟级的「刚才那步撤销」,git 负责小时级和天级的「那条路走错了」。
来源:Claude Code Docs · Checkpointing · Claude Code Docs · Sub-agents · Claude Code Docs · Settings reference
本课速查
/rewind 或 Esc Esc(输入框为空时) 打开时光机
├─ Restore code and conversation 全回退
├─ Restore conversation 只回退对话
├─ Restore code 只回退代码
├─ Summarize from here 定点压缩(往后)
├─ Summarize up to here 定点压缩(往前)
└─ /resume <id> (previous session) /clear 之前那段(同进程内)
盲区:bash 改的 / 后台 subagent 改的 / 会话外改的 / 软硬链接
保质期:最近 100 个 checkpoint,约 30 天(cleanupPeriodDays 可调)
真护城河:动手前先 git commit
主页