帖子说了什么
@madaearly 整理了 Claude Code 检查点(/rewind,也就是按两下 Esc 回退)实际能恢复什么、恢复不了什么,并引用官方文档的说法:子代理的改动 Claude Code「通常不会记录到会话检查点里」。
按帖子整理,能恢复的:
- Claude 在当前对话里用自身文件工具改过的文件;
- 在前台运行的 fork skill 的改动。
可能不会恢复的:
- 在后台运行的 fork skill(帖子说这是默认方式);
- 后台跑的
/code-review --fix; - 只被 Bash 命令改过的文件;
- 你自己在 Claude Code 外手动改的内容;
- 同时运行的另一个会话做的改动;
- 符号链接和硬链接,会被跳过,并有一条容易忽略的「skipped N files」提示。
帖子还提到:每个会话只保留最近 100 个检查点,快照大约在会话最后一次保存后 30 天清理,cleanupPeriodDays 可以延长;给 fork skill 设置 background: false,可让它的改动进入检查点。
官方 CHANGELOG 也印证了相关行为:2.1.309 起 sed -i 按普通 Bash 编辑处理,不再由 /rewind 恢复;同一版本还修复了回退列表把子代理、/code-review --fix 或 shell 命令改过的回合显示成「No code changes」的问题。
为什么值得在意
很多人敢让 Claude 大胆改,是因为觉得「不对就回退」。如果改动来自后台子代理或 Bash,回退后你以为恢复了原样,实际上部分文件还是改过的,接下来的提交、部署就可能带着意外改动上线。
你可以立刻做的几件事
- 高风险改动前先
git commit或开新分支,把 Git 当作真正的撤销键,检查点只是辅助。 - 回退后跑一次
git status/git diff,确认工作区真的回到了预期状态。 - 留意「skipped N files」提示,有就逐个检查被跳过的文件。
- 需要可回退的 fork skill 设
background: false(以你所用版本的文档为准)。 - 同一个仓库避免多个会话同时改,或者用不同的 worktree 分开。
小结
检查点跟踪的是「它记录到的工具改动」,不是「这次会话造成的所有结果」。把 Git 放在第一位,回退后再核对一遍,才不会被一个以为撤销了的改动坑到。
