检查点与回退
检查点允许你保存会话状态,并回退到 Claude Code 会话中之前的某个时刻。在探索不同方案、从错误中恢复或对比不同解决方案时,这一功能无比实用。
概述
检查点可以保存会话状态并回退到历史节点,让你能够安全地进行实验和探索多种方案。检查点是会话状态的快照,包含:
- 所有交流的消息
- 已做的文件修改
- 工具使用历史
- 会话上下文
在探索不同方案、从错误中恢复或对比多种解决方案时,检查点极具价值。
核心概念
| 概念 | 说明 |
|---|---|
| 检查点(Checkpoint) | 会话状态快照,含消息、文件和上下文 |
| 回退(Rewind) | 返回到某个检查点,丢弃之后的所有变更 |
| 分支点(Branch Point) | 用于开始探索多种方案的检查点 |
访问检查点
有两种主要方式访问和管理检查点:
使用键盘快捷键
按两次 Esc(Esc + Esc)打开检查点界面,浏览已保存的检查点。
使用斜杠命令
使用 /rewind 命令(别名:/checkpoint)快速访问:
bash
# 打开回退界面
/rewind
# 或使用别名
/checkpoint回退选项
回退时,你会看到包含五个选项的菜单:
- 恢复代码和对话 —— 将文件和消息都恢复到该检查点的状态
- 恢复对话 —— 仅回退消息,保留当前代码不变
- 恢复代码 —— 仅回退文件变更,保留完整对话历史
- 从此处总结 —— 将该时间点之后的对话压缩为 AI 生成的摘要,而非直接丢弃。原始消息会保留在记录中,可提供额外指令以聚焦特定主题。
- 取消 —— 取消操作,回到当前状态
自动检查点
Claude Code 会自动为你创建检查点:
- 每次用户提示 —— 每条用户输入都会创建一个新检查点
- 持久化 —— 检查点跨会话保留
- 自动清理 —— 检查点在 30 天后自动清除
这意味着你随时可以回退到对话中任意之前的时刻,无论是几分钟前还是几天前。
使用场景
| 场景 | 工作流 |
|---|---|
| 探索方案 | 保存 → 尝试方案 A → 保存 → 回退 → 尝试方案 B → 对比 |
| 安全重构 | 保存 → 重构 → 测试 → 失败则回退 |
| A/B 测试 | 保存 → 设计 A → 保存 → 回退 → 设计 B → 对比 |
| 错误恢复 | 发现问题 → 回退到上一个正确状态 |
实际使用
查看与回退
按两次 Esc 或使用 /rewind 打开检查点浏览器。你会看到所有可用检查点及其时间戳,选择任意一个即可回退到该状态。
检查点详情
每个检查点显示:
- 创建时的时间戳
- 被修改的文件
- 对话中的消息数量
- 使用过的工具
实战示例
示例一:探索不同方案
用户:给 API 增加一个缓存层
Claude:我来为你的 API 接口加上 Redis 缓存……
[在检查点 A 做出变更]
用户:不对,我们试试内存缓存吧
Claude:我来回退到检查点 A,探索另一种方案……
[用户按 Esc+Esc 回退到检查点 A]
[在检查点 B 实现内存缓存]
用户:现在可以对比两种方案了示例二:从错误中恢复
用户:把认证模块重构为 JWT 方式
Claude:我来重构认证模块……
[做了大量修改]
用户:等一下,这把 OAuth 集成搞坏了。回退吧。
Claude:帮你回退到重构之前的状态……
[用户按 Esc+Esc,选择重构前的检查点]
用户:这次我们采取更保守的方案示例三:安全实验
用户:我们试着把这段代码改成函数式风格
[在实验前创建检查点]
Claude:[进行实验性修改]
用户:测试失败了,回退吧。
[用户按 Esc+Esc,回退到检查点]
Claude:已回退所有修改,我们换一种思路吧。示例四:分支探索
用户:我想对比两种数据库设计
[记录当前检查点,称为"起点"]
Claude:我来创建第一种设计……
[实现 Schema A]
用户:现在回退,尝试第二种方案
[用户按 Esc+Esc,回退到"起点"]
Claude:现在实现 Schema B……
[实现 Schema B]
用户:太好了!现在两种 Schema 都有了,可以做选择了检查点保留策略
Claude Code 自动管理你的检查点:
- 每次用户提示都会自动创建检查点
- 旧检查点最多保留 30 天
- 自动清理,防止无限占用存储空间
工作流模式
分支探索策略
探索多种方案时:
1. 初始实现 → 检查点 A
2. 尝试方案一 → 检查点 B
3. 回退到检查点 A
4. 尝试方案二 → 检查点 C
5. 对比 B 和 C 的结果
6. 选择最佳方案继续推进安全重构模式
进行重大修改时:
1. 当前状态 → 检查点(自动)
2. 开始重构
3. 运行测试
4. 测试通过 → 继续开发
5. 测试失败 → 回退,尝试其他方案最佳实践
由于检查点是自动创建的,你可以专注于工作本身,无需手动保存状态。但请注意以下事项:
高效使用检查点
✅ 推荐做法:
- 回退前先查看可用检查点
- 想探索不同方向时使用回退
- 保留检查点以对比不同方案
- 了解每个回退选项的含义(恢复代码和对话、恢复对话、恢复代码、从此处总结)
❌ 不推荐做法:
- 仅依赖检查点来保存代码
- 期望检查点能追踪外部文件系统的变更
- 用检查点替代 git commit
配置
可在设置中切换自动检查点:
json
{
"autoCheckpoint": true
}autoCheckpoint:是否在每次用户提示时自动创建检查点(默认:true)
限制
检查点存在以下限制:
- Bash 命令的变更不会被追踪 ——
rm、mv、cp等文件系统操作不会被捕获 - 外部变更不会被追踪 —— 在 Claude Code 之外(编辑器、终端等)做的修改不会被捕获
- 不能替代版本控制 —— 代码库的永久性、可审计变更请使用 git
故障排查
检查点丢失
问题:找不到预期的检查点
解决方案:
- 检查检查点是否被清除
- 确认设置中
autoCheckpoint已启用 - 检查磁盘空间
回退失败
问题:无法回退到某个检查点
解决方案:
- 确认没有未提交的冲突变更
- 检查检查点是否损坏
- 尝试回退到其他检查点
与 Git 的结合使用
检查点是 git 的补充,而非替代:
| 功能 | Git | 检查点 |
|---|---|---|
| 范围 | 文件系统 | 对话 + 文件 |
| 持久性 | 永久 | 会话级别 |
| 粒度 | commit 节点 | 任意时间点 |
| 速度 | 较慢 | 即时 |
| 共享 | 支持 | 有限 |
两者结合使用:
- 用检查点快速实验
- 用 git commit 保存最终变更
- 在 git 操作前创建检查点
- 将成功的检查点状态 commit 到 git
快速入门
基本工作流
- 正常工作 —— Claude Code 自动创建检查点
- 想回退? —— 按两次
Esc或使用/rewind - 选择检查点 —— 从列表中选择要回退的节点
- 选择恢复内容 —— 恢复代码和对话、恢复对话、恢复代码、从此处总结,或取消
- 继续工作 —— 回到了那个时间点
键盘快捷键
Esc+Esc—— 打开检查点浏览器/rewind—— 访问检查点的另一种方式/checkpoint——/rewind的别名
关于回退时机:上下文监控
检查点让你可以回退——但如何判断什么时候该回退?随着对话增长,Claude 的上下文窗口被填满,模型质量会悄悄下降。你可能在不知不觉中使用了"半盲"状态的模型写代码。
cc-context-stats 通过在 Claude Code 状态栏显示实时上下文区间来解决这个问题。它追踪你在上下文窗口中所处的位置——从 Plan(绿色,适合规划和编码)到 Code(黄色,避免开始新计划)再到 Dump(橙色,收尾并准备回退)。当你看到区间切换时,就知道是时候创建检查点并重新开始了。
相关内容
- 高级特性 —— Planning Mode 等高级功能
- 记忆系统 —— 管理对话历史和上下文
- Slash Commands —— 用户调用的快捷命令
- 钩子 —— 事件驱动自动化
- 插件 —— 功能集合包
总结
检查点是 Claude Code 的自动功能,让你无需担心丢失工作成果就能安全地探索不同方案。每次用户提示都会自动创建新检查点,因此你可以随时回退到会话中的任意历史节点。
核心优势:
- 无顾虑地尝试多种方案
- 快速从错误中恢复
- 并排对比不同解决方案
- 与版本控制系统安全配合使用
记住:检查点不能替代 git。检查点用于快速实验,git 用于永久性代码变更。