Claude Code /rewind 详解:AI 改错了?一键回退
为什么需要 /rewind
你让 Claude 重构一个模块,它改了 5 个文件。你看了一眼——改得不对,方向完全错了。
怎么办?手动 git checkout 每个文件?如果你还没 commit,连 diff 都不好找。
或者另一种情况:Claude 前面几轮回答都很好,但最后一轮走偏了。你想回到”走偏之前”那个节点,重新开始。
/rewind 就是你的后悔药。 一个命令,把代码和对话回退到任意历史节点。
/rewind 是什么
/rewind 是 Claude Code 的代码与对话回退命令(别名 /checkpoint)。它能把你的文件状态和对话历史恢复到会话中任意一个之前的时间点。
输入:
/rewind
会弹出一个交互式的消息选择器,让你选择”回到哪里”。
它是怎么记住历史的
这里有一个巧妙的机制:文件快照系统。
每次 Claude 完成一轮回复后,Claude Code 会自动对当前所有被它修改过的文件做一次快照。这个过程完全透明,你感知不到。
具体来说:
- 触发时机:每次 Claude 回复完成后
- 快照内容:所有被 Claude 编辑、创建或删除的文件
- 存储位置:
~/.claude/file-history/{sessionId}/ - 版本管理:每个文件按版本编号(v1、v2、v3…)
- 上限:每个会话最多 100 个快照,超出后淘汰最旧的
文件备份是增量的——只有实际发生变化的文件才会创建新版本。如果某个文件在两轮之间没变,直接复用上一个版本的备份,不浪费空间。
回退的四种模式
选好要回退的时间点后,你有四个选择:
1. 同时回退代码和对话
Restore code and conversation
最常用的模式。 文件恢复到选定时间点的状态,同时删除该时间点之后的所有对话消息。对话会”分叉”——你可以重新开始那个时间点之后的讨论。
2. 只回退对话
Restore conversation
只删除选定时间点之后的对话消息,文件不动。适合你觉得 Claude 后面的回答不好,但代码改动你想保留的情况。
3. 只回退代码
Restore code
只恢复文件到选定时间点的状态,对话不动。适合你想保留对话上下文(比如 Claude 的分析过程),但代码改动需要撤销的情况。
4. 从这里开始总结
Summarize from here
选定时间点之后的消息会被压缩成一条总结消息。既节省上下文空间,又保留了关键信息。
操作界面
/rewind 的交互体验设计得很直观。
第一步:选择回退点
屏幕上会列出你的对话历史,每条消息都会显示:
- 消息内容摘要
- 代码变更统计(改了几个文件,增删了多少行)
- 如果只改了一个文件,显示文件名
用上下箭头选择,Enter 确认。
第二步:确认回退方式
选好时间点后,显示确认界面:
- 你选的是哪条消息
- 会恢复几个文件
- 有多少行代码变更
- 选择回退模式(代码+对话、只代码、只对话、总结)
底部有一行提醒:
⚠️ Rewinding does not affect files edited manually or via bash
什么会被回退,什么不会
这一点很重要,务必理解:
会被回退的
- Claude 通过文件编辑工具修改的文件(FileEditTool)
- Claude 通过文件写入工具创建的文件(FileWriteTool)
- Claude 删除的文件(从备份恢复)
不会被回退的
- 你手动编辑的文件
- 通过 Bash 命令修改的文件(比如
sed、awk) - 外部工具或 IDE 做的修改
简单记:只有 Claude 的”官方”文件操作才会被追踪和回退。 如果 Claude 用 Bash 工具执行了 sed -i 来修改文件,这个改动不在 rewind 的追踪范围内。
文件备份机制
稍微展开说一下技术细节,帮助你理解它的可靠性。
备份文件格式
~/.claude/file-history/{sessionId}/
├── abc123def4567890@v1 # 某个文件的第 1 个版本
├── abc123def4567890@v2 # 第 2 个版本
├── abc123def4567890@v3 # 第 3 个版本
├── f1e2d3c4b5a69788@v1 # 另一个文件的第 1 个版本
└── f1e2d3c4b5a69788@v2
文件名是原始路径的哈希值,加上版本号。
变更检测
Claude Code 不是每次都盲目备份。它会:
- 检查文件的 stat 信息(大小、修改时间)
- 如果 stat 有变化,读取文件内容做字节级比对
- 只有真正变化了的文件才创建新版本
权限保留
恢复文件时,不仅恢复内容,还恢复文件权限(通过 chmod)。所以可执行脚本回退后仍然是可执行的。
实际使用场景
场景 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 → 后续消息被压缩成总结。
开启和关闭
文件快照系统默认是开启的,你不需要做任何配置。
如果出于性能或隐私考虑想关闭:
# 环境变量关闭
export CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING=1
或者在全局配置中设置 fileCheckpointingEnabled: false。
关闭后,/rewind 仍然可以回退对话,但无法恢复文件。
/rewind vs git
你可能会想:我有 git 啊,为什么还需要 /rewind?
| 特性 | /rewind | git |
|---|---|---|
| 粒度 | 每轮对话 | 每次 commit |
| 需要提前 commit | 不需要 | 需要 |
| 追踪未 commit 的改动 | 自动追踪 | 不追踪 |
| 能回退对话 | 能 | 不能 |
| 追踪手动编辑 | 不追踪 | 追踪 |
简单说:git 是长期版本管理,/rewind 是会话内的即时撤销。 两者互补,不冲突。
最佳实践:在每个重要节点先 commit,然后用 /rewind 处理 commit 之间的细粒度回退。
写在最后
/rewind 的核心价值是给你犯错的勇气。
和 AI 协作写代码,你不可能每次都给出完美的指令。Claude 也不可能每次都理解得准确无误。有了 /rewind,你可以大胆尝试:让 Claude 试一个激进的方案,不满意就回退;让它走一条冒险的路,走不通就退回来。
没有后悔药的 AI 编程是不完整的。
更多同类文章
- AI-first 创业公司,为什么只需要一种编程语言?
- cc-ping:一行命令 Ping 所有 Claude Code 配置
- 震惊!程序员用这个工具,4分钟干完95分钟的活!效率暴涨24倍
- CCBot - 研发提效 24 倍
- Claude Code /add-dir:被低估的 Monorepo 神器
- Claude Code 省 Token 小技巧:感叹号的妙用
- 我做了个机器人,让团队在飞书里用 Claude Code
- Claude Code /btw 命令详解:不打扰主线的快问快答
- Claude Code /compact:释放上下文,不丢进度
- Claude Code /config:一文搞懂所有可调设置
- Claude Code /context:你的上下文都被什么吃了?
- Claude Code /diff:这次对话改了什么,一目了然
- Claude Code /fast:同样的 Opus,两倍速——值不值?
- Claude Code 引用外部知识的最佳实践:GitHub MCP + Context7
- Claude Code /hooks:让 AI 按你的规矩办事
- Claude Code /init:10 秒自动生成 CLAUDE.md
- Claude Code MCP:让 AI 连接 GitHub、数据库等一切工具
- Claude Code /memory 详解:让 AI 真正记住你的项目
- Claude Code /model:Opus、Sonnet、Haiku 怎么选?
- Claude Code /permissions:谁能干什么,你说了算
- Claude Code /plan 详解:先想清楚再动手
- Claude Code + Playwright MCP:AI 终于能"看见"页面了
- Claude Code /resume 命令详解:别让对话白聊
- Claude Code /review:让 AI 帮你做 Code Review
- Claude Code Skills 详解:打造你的专属命令库
- Claude Code /stats:看看 AI 到底帮你写了多少代码
- Claude Code /status 命令详解:一眼看清会话全貌
- Claude Code /tasks 命令详解:后台任务尽在掌控
- Claude Code /usage 命令详解:你的额度还剩多少
- Claude Code /vim:在 AI 编程助手里用 Vim 键位
- Claude Code 使用指南:从安装到实战,一篇就够(2026)
- Claude 全家桶:从聊天到写代码到自动办公,一文讲清楚
- Claude Code /agents 详解:自定义 AI 子代理,各司其职
- Claude Code /doctor 详解:一键诊断你的开发环境
- Claude Code /effort 详解:控制 AI 思考的深度
- Claude Code /cost 详解:你的 AI 编程到底花了多少钱
- Claude Code /export 详解:把 AI 对话带走
- Claude Code /plugin 详解:给你的 AI 编程助手装插件
- Claude Code /theme 详解:给你的终端换个好看的皮肤
- Claude Code /insights 详解:用 AI 分析你自己用 AI 的方式
- Claude Code /rename 详解:给你的会话取个有意义的名字
- Claude Code settings.json 详解(一):配置文件在哪里、谁说了算
- Claude Code settings.json 详解(二):permissions 权限系统全解析
- Claude Code settings.json 详解(三):hooks 钩子全解析
- Claude Code settings.json 详解(四):env、模型、认证与其他实用字段