AI coding - rewind、undo 撤销操作
Claude Code /rewind 详解:AI 改错了?一键回退 — Vincent's Blog
或者另一种情况:Claude 前面几轮回答都很好,但最后一轮走偏了。你想回到”走偏之前”那个节点,重新开始。
/rewind 就是你的后悔药。 一个命令,把代码和对话回退到任意历史节点。
/rewind 是什么
/rewind 是 Claude Code 的代码与对话回退命令(别名 /checkpoint)。它能把你的文件状态和对话历史恢复到会话中任意一个之前的时间点。
输入:
/rewind
会弹出一个交互式的消息选择器,让你选择”回到哪里”。
它是怎么记住历史的
这里有一个巧妙的机制:文件快照系统。
每次 Claude 完成一轮回复后,Claude Code 会自动对当前所有被它修改过的文件做一次快照。这个过程完全透明,你感知不到。
具体来说:
- 触发时机:每次 Claude 回复完成后
- 快照内容:所有被 Claude 编辑、创建或删除的文件
- 存储位置:
~/.claude/file-history/{sessionId}/ - 版本管理:每个文件按版本编号(v1、v2、v3…)
- 上限:每个会话最多 100 个快照,超出后淘汰最旧的
文件备份是增量的——只有实际发生变化的文件才会创建新版本。如果某个文件在两轮之间没变,直接复用上一个版本的备份,不浪费空间。
什么会被回退,什么不会
这一点很重要,务必理解:
会被回退的
- Claude 通过文件编辑工具修改的文件(FileEditTool)
- Claude 通过文件写入工具创建的文件(FileWriteTool)
- Claude 删除的文件(从备份恢复)
不会被回退的
- 你手动编辑的文件
- 通过 Bash 命令修改的文件(比如
sed、awk) - 外部工具或 IDE 做的修改
简单记:只有 Claude 的”官方”文件操作才会被追踪和回退。 如果 Claude 用 Bash 工具执行了 sed -i 来修改文件,这个改动不在 rewind 的追踪范围内。
实际使用场景
场景 1:重构方向错了
你让 Claude 把一个类重构成函数式风格。它改了 5 个文件,你看了之后觉得还是原来的好。
/rewind
选择重构之前的那条消息 → Restore code and conversation → 回到起点重新来。
场景 2:只想撤销最后一步
Claude 帮你改了三轮,前两轮很好,第三轮改坏了。
/rewind
选择第三轮之前的消息 → Restore code and conversation → 保留前两轮的成果。
场景 3:代码没问题,对话要重来
Claude 的代码改动是对的,但后续的对话走偏了,你想从某个节点重新引导。
/rewind
选择消息 → Restore conversation → 文件保持不变,对话从选定点重新开始。
场景 4:上下文太长了
会话太长,上下文快满了。你想保留关键信息但压缩历史。
/rewind
选择一个合适的节点 → Summarize from here → 后续消息被压缩成总结。
| 特性 | /rewind | git |
|---|---|---|
| 粒度 | 每轮对话 | 每次 commit |
| 需要提前 commit | 不需要 | 需要 |
| 追踪未 commit 的改动 | 自动追踪 | 不追踪 |
| 能回退对话 | 能 | 不能 |
| 追踪手动编辑 | 不追踪 | 追踪 |
简单说:git 是长期版本管理,/rewind 是会话内的即时撤销。 两者互补,不冲突。
最佳实践:在每个重要节点先 commit,然后用 /rewind 处理 commit 之间的细粒度回退。
如果你想的不是”回退到某个节点”而是”压缩对话腾出上下文”,用 /compact。两者常常配合使用。
写在最后
/rewind 的核心价值是给你犯错的勇气。
和 AI 协作写代码,你不可能每次都给出完美的指令。Claude 也不可能每次都理解得准确无误。有了 /rewind,你可以大胆尝试:让 Claude 试一个激进的方案,不满意就回退;让它走一条冒险的路,走不通就退回来。
没有后悔药的 AI 编程是不完整的。

浙公网安备 33010602011771号