Mingyu's Library主页
2026年9月9日

第 28 课:Checkpointing 与 `/rewind` —— 把「改坏了」变成一个可回退的动作

日期: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 之前那段对话。限制:

配套认知: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 里。

③ 会话外的改动不追踪。 你自己在编辑器里手改的、或另一个并发 Claude Code 会话改的文件,除非恰好和当前会话改了同一批文件,否则不在快照里。

④ 软链接 / 硬链接路径不还原。 选 Restore code 时,Claude Code 会跳过所有是 symlink 或 hard link 的被追踪路径,并提示 Restored the code, but skipped N files,这些文件保持当前内容。dotfile 管理器软链进项目的配置文件、pnpm 硬链进来的文件都属于这一类。想看具体跳过了哪些路径,还原之前先开 /debug,日志在 ~/.claude/debug/<session-id>.txt。

另外两条保质期约束:

{ "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