Claude Code: 检查点与回滚
最后更新:2026-08-31
检查点是 Claude Code 的安全网——每次关键操作前自动保存快照,出问题随时回滚。
💡 提示:检查点不只是 git commit——它是 Claude Code 会话粒度的快照,记录了每一步操作的状态,可以精确回滚到任意步骤。
📋 前置知识:第十九章 CLI 参考手册
1. 你将学到
- 检查点机制与自动快照
- 手动创建检查点
- 回滚到任意步骤
- 检查点与 git 的关系
- 安全网策略
2. 检查点机制
(1) 工作原理
graph LR
A[会话开始] --> B[检查点1]
B --> C[操作1]
C --> D[检查点2]
D --> E[操作2]
E --> F[检查点3]
F --> G[操作3]
G --> H[当前状态]
H -->|回滚| D
| 触发条件 | 自动创建 | 说明 |
|---|---|---|
| 会话开始 | ✅ | 记录初始状态 |
| 修改文件前 | ✅ | 记录修改前状态 |
| 执行命令前 | ✅ | 记录命令前状态 |
| 手动请求 | ✅ | /checkpoint |
(2) 检查点内容
TEXT
📖 仅展示
检查点 #3
时间: 2026-08-28 14:30:15
操作: 修改 src/auth/jwt.ts
变更:
- src/auth/jwt.ts (+12 -3)
- src/middleware/auth.ts (+5 -1)
文件快照: 保存了修改前的完整内容
▶ 示例 1: 查看检查点列表
TEXT
📖 仅展示
> /checkpoints
检查点列表:
#1 [14:20:00] 会话开始 | 0 files changed
#2 [14:22:15] 修改 jwt.ts | 2 files changed
#3 [14:25:30] 修改 auth.ts | 1 file changed
#4 [14:30:15] 添加测试 | 3 files changed
#5 [14:35:00] 当前状态 | 6 files changed
3. 手动检查点
(1) 创建检查点
TEXT
📖 仅展示
# 手动创建检查点
> /checkpoint
# 带描述的检查点
> /checkpoint "完成用户认证重构"
(2) 最佳实践
| 时机 | 原因 |
|---|---|
| 大修改前 | 重构、迁移等高风险操作 |
| 阶段性完成 | 一个功能点完成时 |
| 不确定的操作 | 尝试性修改前 |
| 离开前 | 保存当前进度 |
▶ 示例 2: 大修改前创建检查点
TEXT
📖 仅展示
> /checkpoint "迁移前状态"
✅ 检查点 #6 已创建
> 将认证从 Session 迁移到 JWT
Claude Code:
→ Modifying 12 files...
→ Running tests...
❌ 3 tests failed
# Alice 决定先回滚,换一种方式
> /rollback 6
✅ 已回滚到检查点 #6(迁移前状态)
4. 回滚操作
(1) 回滚方式
| 命令 | 说明 |
|---|---|
/rollback |
回滚到上一个检查点 |
/rollback <n> |
回滚到指定检查点 |
/undo |
撤销最近一次操作 |
git checkout . |
回滚所有未提交修改 |
(2) 回滚范围
TEXT
📖 仅展示
# 精确回滚:只撤销特定步骤
> /rollback 4
✅ 已回滚到检查点 #4
撤销了: 添加测试 (3 files)
# 全部回滚:回到会话初始状态
> /rollback 1
✅ 已回滚到检查点 #1(会话开始)
撤销了所有修改
▶ 示例 3: 分步回滚
TEXT
📖 仅展示
> /checkpoints
#1 [14:20] 开始
#2 [14:22] 添加 UserService
#3 [14:25] 添加测试
#4 [14:30] 重构 UserService(失败)
#5 [14:35] 尝试修复(仍然失败)
# 只回滚失败的重构,保留成功的添加
> /rollback 3
✅ 已回滚到检查点 #3
保留了: UserService + 测试
撤销了: 重构 + 修复尝试
# 用另一种方式重构
> 用不同的方案重构 UserService
5. 检查点与 git
(1) 关系对比
| 维度 | 检查点 | git |
|---|---|---|
| 粒度 | 操作级 | commit 级 |
| 持久性 | 会话内 | 永久 |
| 存储 | 内存/临时 | 仓库 |
| 共享 | 不可共享 | 可推送 |
| 回滚 | 精确到步骤 | 精确到 commit |
(2) 协同使用策略
TEXT
📖 仅展示
# 最佳实践:检查点 + git 双保险
# 1. 会话开始前 git commit
git add -A && git commit -m "before: claude session"
# 2. 使用检查点进行会话内回滚
/checkpoint "阶段性完成"
/rollback 3
# 3. 会话结束后 git commit
git add -A && git commit -m "feat: user auth module"
# 4. 如果整个会话失败,git 回滚
git reset --hard HEAD~1
▶ 示例 4: 检查点与 git 协作
BASH
# Alice 的安全工作流
# 1. 开始前提交
git add -A && git commit -m "chore: before claude session"
# 2. 启动 Claude Code
claude
# 3. 创建检查点
/checkpoint "重构前"
# 4. 执行重构
> 重构认证模块
# 5a. 成功 → git commit
/commit "refactor: auth module"
# 5b. 失败 → 检查点回滚
/rollback 1
# 5c. 完全失败 → git 回滚
# Ctrl+D 退出
git reset --hard HEAD~1
6. 安全网策略
(1) 多层安全网
TEXT
📖 仅展示
层级1: /undo — 撤销最近操作
层级2: /rollback — 回滚到检查点
层级3: git checkout — 回滚未提交修改
层级4: git reset — 回滚到任意 commit
层级5: git reflog — 找回丢失的 commit
(2) 项目级安全策略
MARKDOWN
<!-- CLAUDE.md -->
## 安全策略
- 每次会话前自动 git commit
- 大修改前创建检查点
- 修改超过 10 个文件时必须先 /checkpoint
- 敏感目录修改后立即 /checkpoint
- 不使用 --allow-full-auto(除非 CI)
❓ 常见问题
Q 检查点会保存多久?
A 仅在当前会话内有效。退出会话后检查点消失,但 git commit 永久保存。
Q 回滚会丢失所有进度吗?
A 不会。回滚到指定检查点只撤销该检查点之后的修改,之前的修改保留。
Q 检查点占多少空间?
A 检查点存储文件差异,不占太多空间。单个检查点通常几十 KB。
Q 能回滚单文件吗?
A 检查点回滚是整个步骤的回滚。单文件回滚用
git checkout -- <file>。Q
/undo 和 /rollback 有什么区别?A
/undo 只撤销最近一次操作,/rollback 可回滚到任意检查点。Q 回滚后 Claude Code 还记得之前的对话吗?
A 对话历史保留,但文件状态已回滚。Claude Code 知道你做了什么、又回滚了什么。
📖 小节
- 检查点在关键操作前自动创建,也可手动创建
/rollback <n>精确回滚到指定步骤- 检查点是会话级的,git 是永久级的,两者协同使用
- 多层安全网:undo → rollback → git checkout → git reset → reflog
- 大修改前必创建检查点,敏感操作后必检查点
📝 作业
- 基础题(难度⭐):在会话中创建检查点、执行修改、回滚,验证文件恢复原状。
- 进阶题(难度⭐⭐):执行 3 步修改,回滚到第 2 步,验证第 1 步的修改保留、第 3 步的修改被撤销。
- 挑战题(难度⭐⭐⭐):设计一个多层安全网策略,组合使用检查点和 git,确保任何操作都能恢复。