Claude How To # Checkpoints 与 Rewind Checkpoints 可以让你保存对话状态,并在 Claude Code 会话中回退到之前的时间点。无论你是在探索不同方案、修复错误,还是比较多个实现路径,这个能力都非常有用。 ## 概览 Checkpoints 会保存会话状态,让你可以安全地试验和探索多种方案。它们本质上是当前对话状态的快照,包含: - 所有已交换的消息 - 已做出的文件修改 - 工具使用历史 - 当前会话上下文 当你在尝试不同实现方式、从错误中恢复,或比较替代方案时,这个功能尤其好用。 ## 核心概念 | 概念 | 说明 | |---------|-------------| | **Checkpoint** | 保存消息、文件和上下文的对话快照 | | **Rewind** | 回到之前的 checkpoint,并丢弃之后的更改 | | **Branch Point** | 从同一个 checkpoint 出发,探索多个方案 | ## 访问 Checkpoints 你可以通过两种主要方式访问和管理 checkpoints: ### 使用键盘快捷键 按两次 `Esc`(`Esc` + `Esc`)打开 checkpoint 界面并浏览已保存的 checkpoints。 ### 使用 Slash Command 使用 `/rewind` 命令(别名:`/checkpoint`)快速进入: ```bash # 打开 rewind 界面 /rewind # 或者使用别名 /checkpoint ``` ## Rewind 选项 回退时,你会看到一个包含五个选项的菜单: 1. **恢复代码和对话** - 把文件和消息都恢复到那个 checkpoint 2. **恢复对话** - 只回退消息,保留当前代码不变 3. **恢复代码** - 只回退文件修改,保留完整对话历史 4. **从这里开始总结** - 把从这里往后的对话压缩成 AI 生成的摘要,而不是直接丢弃。原始消息仍会保留在记录中。你也可以额外指定摘要应聚焦哪些主题。 5. **算了** - 取消并返回当前状态 ## 自动 Checkpoints Claude Code 会自动为你创建 checkpoints: - **每次用户提示** - 每次用户输入都会创建一个新 checkpoint - **持久保存** - checkpoints 会跨会话保留 - **自动清理** - 30 天后自动清理旧 checkpoints 这意味着你随时都可以回到之前的任意节点,从几分钟前到几天前都可以。 ## 使用场景 | 场景 | 工作流 | |----------|----------| | **探索不同方案** | 保存 → 试方案 A → 保存 → Rewind → 试方案 B → 比较 | | **安全重构** | 保存 → 重构 → 测试 → 如果失败:Rewind | | **A/B 测试** | 保存 → 设计 A → 保存 → Rewind → 设计 B → 比较 | | **错误恢复** | 发现问题 → Rewind 到最后一个正常状态 | ## 如何使用 Checkpoints ### 查看和回退 按两次 `Esc`,或者使用 `/rewind` 打开 checkpoint 浏览器。你会看到一个带时间戳的可用 checkpoint 列表。选择任意一个 checkpoint,即可回退到该状态。 ### Checkpoint 详情 每个 checkpoint 会显示: - 创建时间 - 被修改的文件 - 对话中的消息数量 - 使用过的工具 ## 实战示例 更多可直接参考的中文示例见 [checkpoint-examples.md](checkpoint-examples.md)。 ### 示例 1:探索不同方案 ```text User: 我们给 API 加一个缓存层吧 Claude: 我会为你的 API 端点添加 Redis 缓存…… [在 checkpoint A 处做出修改] User: 其实我们先试试内存缓存 Claude: 我会 rewind 回去,探索另一种方案…… [用户按下 Esc+Esc 并回退到 checkpoint A] [在 checkpoint B 处实现内存缓存] User: 现在我可以比较两种方案了 ``` ### 示例 2:从错误中恢复 ```text User: 把认证模块重构成 JWT Claude: 我会重构认证模块…… [做出大量修改] User: 等等,这把 OAuth 集成弄坏了。我们回去。 Claude: 我来帮你回退到重构之前…… [用户按下 Esc+Esc,并选择重构前的 checkpoint] User: 这次我们试一个更保守的方案 ``` ### 示例 3:安全试验 ```text User: 我们试着把它改写成函数式风格 [在实验前创建 checkpoint] Claude: [执行实验性修改] User: 测试失败了。我们回退吧。 [用户按下 Esc+Esc 并回退到 checkpoint] Claude: 我已经回退这些更改了。我们试另一个方案。 ``` ### 示例 4:分支式探索 ```text User: 我想比较两种数据库设计 [记下 checkpoint,命名为 "Start"] Claude: 我先实现第一种设计…… [实现 Schema A] User: 现在让我回去试第二种方案 [用户按下 Esc+Esc 并回退到 "Start"] Claude: 现在我实现 Schema B…… [实现 Schema B] User: 太好了,我现在有两个 schema 可以选择 ``` ## Checkpoint 保留策略 Claude Code 会自动管理你的 checkpoints: - 每次用户输入都会自动创建 checkpoint - 旧 checkpoint 最多保留 30 天 - 系统会自动清理,避免存储无限增长 ## 工作流模式 ### 探索时的分支策略 当你在探索多个方案时: ```text 1. 从初始实现开始 → Checkpoint A 2. 尝试方案 1 → Checkpoint B 3. 回退到 Checkpoint A 4. 尝试方案 2 → Checkpoint C 5. 比较 B 和 C 的结果 6. 选择最佳方案并继续 ``` ### 安全重构模式 当你在做大改动时: ```text 1. 当前状态 → Checkpoint(自动) 2. 开始重构 3. 运行测试 4. 如果测试通过 → 继续 5. 如果测试失败 → Rewind 并尝试别的方案 ``` ## 最佳实践 因为 checkpoints 是自动创建的,所以你可以专注于工作,而不用担心手动保存状态。不过,下面这些习惯仍然很重要: ### 如何高效使用 Checkpoints ✅ **应该做:** - 回退前先看清楚可用的 checkpoints - 当你想尝试不同方向时使用 rewind - 保留 checkpoints 方便比较不同方案 - 理解每个 rewind 选项的作用(恢复代码和对话、恢复对话、恢复代码、或总结) ❌ **不要做:** - 只依赖 checkpoints 来保存代码 - 指望 checkpoints 跟踪外部文件系统变化 - 把 checkpoints 当成 git commit 的替代品 ## 配置 你可以在设置中开启或关闭自动 checkpoints: ```json { "autoCheckpoint": true } ``` - `autoCheckpoint`:是否在每次用户提示后自动创建 checkpoint(默认:`true`) ## 局限性 Checkpoints 很适合会话级回退,但它不是版本控制系统。对于需要长期保存、可审计、可共享的改动,仍然应该使用 git。 ## 故障排查 ### 找不到 Checkpoints - 检查你是否在支持该功能的 Claude Code 版本中 - 确认自动 checkpoint 没有被关闭 - 重新打开会话再试一次 ### Rewind 失败 - 确认你选择了一个有效的 checkpoint - 查看是否存在与文件系统或权限相关的限制 - 尝试先分别恢复代码或对话,再决定是否同时恢复两者 ## 与 Git 的集成 Checkpoints 和 git 是互补关系: - Checkpoints 用于会话内探索和安全试验 - Git 用于永久保存代码历史 - 你可以先用 checkpoints 快速试错,再把最终方案提交到 git ## 快速开始 ### 基本工作流 ```text 1. 开始修改前自动创建 checkpoint 2. 尝试某个方案 3. 如果结果不理想,按 Esc 两次 4. 选择合适的 rewind 选项 5. 继续探索或提交最终方案 ``` ### 键盘快捷键 - `Esc` + `Esc`:打开 checkpoint 浏览器 - `/rewind`:通过命令进入回退界面 - `/checkpoint`:`/rewind` 的别名 ## 什么时候该 rewind:上下文监控 如果你发现这些信号,通常就该回退了: - 当前方案开始变复杂,而且你还没确定方向 - 测试刚失败,问题可能就是最近一两步引入的 - 你想比较两种实现方式 - 你想保留一个“干净起点”继续探索 ## 相关概念 - **Memory**:跨会话的长期上下文,见 [02-memory/README.md](../02-memory/README.md) - **Hooks**:事件驱动自动化,见 [06-hooks/README.md](../06-hooks/README.md) - **Plugins**:打包功能集合,见 [07-plugins/README.md](../07-plugins/README.md) - **Advanced Features**:包括 planning mode 和背景任务,见 [09-advanced-features/README.md](../09-advanced-features/README.md) ## 更多资源 - [根目录中文指南](../README.md) - [Claude Code 官方检查点文档](https://code.claude.com/docs/en/checkpointing) - [Claude Code 高级功能指南](../09-advanced-features/README.md) ## 总结 Checkpoints 的价值在于让你敢于试错。它让“先试再说”和“试错后立刻回退”变得安全,从而帮你更快找到正确方案。