📒 学霸笔记:10|安全基石(下):Checkpointing,获得让 AI“时光倒流”的超能力
Top Student Notes: 10 | Security Foundations (Part 2): Checkpointing — Giving AI the Superpower of “Time Reversal”
课程 / Course: AI 原生开发工作流实战 / AI-Native Development Workflow in Practice
讲师 / Instructor: Tony Bai
章节 / Chapter: 10
主题 / Topic: Checkpointing、/rewind、代码回退、对话回退、AI 重构试错安全网、Checkpoint 与 Git 的关系
一、这一讲在解决什么问题?
What Problem Does This Lecture Solve?
上一讲我们解决的是:
如何让 AI 在“行动之前”受到约束。
也就是通过:
- Permissions
- Sandbox
让 AI 不要乱来。
但这还不够。
因为现实中更常见的问题不是:
- AI 恶意破坏
而是:
- AI 按你的要求做了
- 你也批准了
- 结果后来发现:方向不对、设计变复杂、效果不满意
这时你最想做的一件事就是:
反悔。
而传统方式很痛苦:
- 手动撤销很多次
- 小心翼翼
git restore - 逐文件比对
- 容易把好的改动和坏的改动一起弄丢
所以这一讲解决的是:
如何为 AI 的探索式修改提供“一键后悔药”。
Claude Code 的答案就是:
Checkpointing(检查点)
二、本讲核心结论
Core Conclusion of This Lecture
一句话总结
Checkpointing 本质上是 Claude Code 为每次 Prompt 自动建立的“会话级快照系统”,让你可以在 AI 试错之后,安全、低成本地回到过去。
三、为什么 Checkpointing 很重要?
Why Checkpointing Matters
Tony 用了一个非常传神的说法:
它解决的是“重构的恐惧”。
什么叫“重构的恐惧”?
你让 AI:
- 改一轮
- 再改一轮
- 再抽象一层
- 再引入泛型 / 枚举 / 新模式
结果越改越复杂。
这时问题不是“AI 会不会写代码”,而是:
你敢不敢放心地让它继续尝试?
如果没有低成本撤回机制,你就会变得越来越保守:
- 不敢让 AI 做大改动
- 不敢尝试不同设计
- 不敢探索多个方向
于是 AI 的价值被大幅压缩。
学霸理解
Checkpointing 的真正价值不是“回滚本身”,而是:
它降低了试错成本,从而提升了你敢于探索的意愿。
也就是说:
- 没有 Checkpointing:你会趋向保守
- 有了 Checkpointing:你可以大胆试验
所以它本质上是:
AI 协作中的心理安全机制
四、Checkpointing 的直观类比
Intuitive Analogy for Checkpointing
Tony 用“游戏自动存档”类比,非常准确。
你在打 Boss 之前自动存档。
打输了,直接读档重来。
在 Claude Code 里:
- 每次你发出一个新 Prompt
- 系统都会悄悄保存一个检查点
- 如果后续改坏了
- 你就可以回到那个时刻
一句话
Checkpointing = AI 协作里的自动存档系统
五、Checkpointing 的工作原理
How Checkpointing Works
这一部分要理解得比较清楚,因为它决定了你怎么正确使用 /rewind。
1. 触发时机
Trigger Timing
触发点不是“每次文件变动”,而是:
每当你提交一个新的 Prompt 时
Claude Code 会在 AI 开始新一轮操作之前,先做一次快照。
学霸理解
这意味着检查点的粒度是:
Prompt 粒度,而不是编辑粒度
所以一个 Prompt 可以对应一整个“AI 改动批次”。
2. 它保存什么?
What Does It Save?
Tony 强调:保存的不只是代码。
它保存两类核心状态:
① 代码状态
当前会话中所有被 AI 接触过的文件状态,包括:
- 读过的文件
- 改过的文件
② 对话状态
到那一刻为止的完整会话历史
为什么同时保存这两种状态很重要?
因为 AI 协作不是单纯的“文件编辑”,而是:
对话驱动的代码演进
所以如果只保存代码,不保存对话,你回退后上下文断裂。
如果只保存对话,不保存代码,你回退后工作区不一致。
Checkpointing 最精妙的地方就在于:
它把“代码状态”和“对话状态”绑定在同一个时间点上。
六、把它理解成“影子 Git 仓库”
Think of It as a “Shadow Git Repository”
这是 Tony 给出的非常好的心智模型。
你可以把 Checkpointing 想成:
Claude Code 在后台为你维护了一个与项目 Git 仓库隔离的“影子仓库”。
每次你发 Prompt,它就在“影子仓库”里自动做一次:
git commit -a -m "Checkpoint before prompt N"
当然这不是你真实项目的 Git 历史。
它不会污染你的 .git 提交记录。

学霸理解
所以 Checkpointing 不是替代 Git,而是:
为当前 AI 会话提供临时、局部、可反悔的“会话版本控制”。
七、Checkpointing 的真正厉害之处
What Makes Checkpointing Powerful
它厉害的地方不只是“能回滚”,而是:
它把你和 AI 的协作过程,变成了可分叉、可试验、可回退的探索空间。
这意味着你可以:
- 尝试更激进的重构
- 比较多个设计方案
- 让 AI 连续试几条路线
- 不满意就退回上一个时间点
这其实把 AI 协作从“线性流程”变成了“可试错流程”。
八、实战案例的主线
Main Line of the Practical Example
Tony 用了一个 greeting.go 的重构场景,分三步演示。
第一步:第一次重构成功
原始代码是深层 if-else 嵌套。
第一轮让 AI 重构,结果不错。
例如改成:
- 更清晰的
switch - 更平的逻辑结构
你满意,于是批准。
这时工作区进入:
状态 V2
第二步:第二次重构失败
你想继续优化,于是让 AI:
- 引入
TimeOfDay枚举 - 用枚举代替多个布尔值
AI 确实改了,但你后来发现:
- 引入了复杂度
- 可读性下降
- 逻辑反而混乱
但你已经批准了它的改动。
这时工作区进入:
状态 V3(不满意版本)
第三步:用 /rewind 回去
这时你不需要:
- 手动撤销多次
- 逐文件恢复
- 自己去记哪些地方变了
你只要输入:
/rewind
或者连续按两次 Esc
就能打开检查点列表,然后选择回退。

九、/rewind 的本质
The Essence of /rewind
/rewind 不是简单的“撤销上一条编辑”,而是:
在多个历史检查点之间穿梭的时光机。
它面对的不是“单次光标操作”,而是:
- 一整轮 Prompt
- 一批 AI 改动
- 一个阶段性的思路分支
十、三种回退模式是这一讲的核心
The Three Rewind Modes Are the Core of This Lecture
Tony 这里讲得非常精妙。
因为“回退”不是只有一种。

十一、模式一:Rewind code (只回退代码)
Mode 1: Rewind Code Only
含义
- 回退代码状态
- 保留完整对话历史
也就是说:
- 文件回到更早状态
- 但你们刚才聊过什么,AI 还记得
心智模型
“讨论是有价值的,但实现不满意。我们保留脑力成果,重做动手部分。”
适合场景
- AI 思路是对的
- 代码实现写得不好
- 你想基于刚才的讨论重新生成实现
例子
例如你和 AI 已经讨论出:
- 为什么这段逻辑要抽象
- 抽象边界在哪里
- 接口应该长什么样
但 AI 写出来的代码风格一般、命名不满意。
这时最适合只回退代码,不回退对话。
十二、模式二:Rewind conversation(只回退对话)
Mode 2: Rewind Conversation Only
含义
- 回退对话历史
- 保留当前代码修改
也就是说:
- 文件不动
- 但聊天上下文回到较早节点
心智模型
“代码是对的,但我觉得我刚才说的话有问题。让我从更早的对话节点重新引导你。”
适合场景
- AI 做出的代码你满意
- 但你不想沿着刚才那条对话继续
- 想保留成果,同时换一个问题方向或讨论路径
这为什么有价值?
因为很多时候你会发现:
- 代码已经是你想要的
- 但后续对话开始跑偏
- 或者你意识到自己接下来想探索另一条思路
你并不想丢掉代码,只想重置“谈话分支”。
十三、模式三:Rewind code and conversation(全部回退)
Mode 3: Rewind Code and Conversation
含义
- 代码回退
- 对话也回退
即彻底回到某个历史检查点。
心智模型
“刚才这一整段探索都是死胡同,代码不要了,对话也不要了,从那个时间点重新开始。”
适合场景
- 不仅代码不好
- 连整个思路方向都错了
- 你希望彻底抹掉这段探索路径
这是最“干净”的重置方式
在课程案例里,因为 Tony 不满意的是:
- 第二次重构的代码
- 第二次重构的整体方向(引入枚举)
所以选择的是:
Rewind code and conversation
这样一键回到 V2。
十四、三种模式怎么选?
How to Choose Among the Three Modes?
这是复习时最需要掌握的地方。
如果是“实现错了,思路还对”
选:
Rewind code
如果是“代码对了,但我想换一种对话路径”
选:
Rewind conversation
如果是“代码和方向都错了”
选:
Rewind code and conversation
一句话口诀
留脑不留手:Rewind code
留手不留脑:Rewind conversation
脑手全重来:Rewind code and conversation
这个很好记。
十五、Checkpointing 的边界:它不是万能后悔药
Limits of Checkpointing: It Is Not a Universal Undo Mechanism
Tony 特别强调,这一讲最容易产生误解的地方在于:
Checkpointing 很强,但它不是全能撤销系统。
必须知道它不能做什么。
十六、边界一:它不能回滚 Bash 副作用
Limit 1: It Cannot Undo Bash Side Effects
这是最重要的限制。
Checkpointing 主要快照的是:
- 文件内容状态
- 对话状态
它不跟踪 Bash 命令带来的外部副作用。
例如 AI 执行了:
- 删除文件
- 强推 Git
- 停掉容器
- 改数据库
- 调外部服务
这些不是单纯“文件编辑”能恢复的。
例子
如果 AI 执行:
rm sensitive-data.log
git push --force
docker stop my-container
那么 /rewind:
- 不能恢复被删日志
- 不能撤销已推送远端历史
- 不能自动重启被停掉容器
学霸理解
这和上一讲形成强关联:
Checkpointing 解决的是“Claude 内部编辑可反悔”,不是“外部世界副作用可逆”。
所以:
- 对高危 Bash 命令,仍要依赖 Permissions + Sandbox
- 不能指望
/rewind给 Bash 擦屁股
十七、边界二:它不跟踪你在编辑器里的手工改动
Limit 2: It Does Not Track Your External Manual Edits
如果你一边和 Claude Code 对话,一边自己在:
- VS Code
- Vim
- GoLand
里手动改文件,这些改动不一定被纳入 Checkpointing 体系。
为什么?
因为 Checkpointing 关注的是:
Claude Code 所感知和管理的会话状态
而不是你整个系统上所有工具的全局编辑历史。
含义
/rewind 恢复的是:
- 上一个检查点时刻
- Claude Code 所知晓的文件状态
所以不要把它当成 IDE 的全局 Undo。
十八、边界三:它不是 Git 的替代品
Limit 3: It Is Not a Replacement for Git
这点 Tony 讲得特别重要。
很多人可能会误会:
- 既然能回退历史
- 那是不是不用 Git 了?
答案是:
绝对不是。
两者解决的问题不同

Checkpointing 解决什么?
- AI 会话中的试错回退
- Prompt 粒度探索
- 临时性“后悔药”
Git 解决什么?
- 正式版本历史
- 团队协作
- 分支管理
- 持久化里程碑
- 审查与合并流程
学霸理解
可以这样记:
Checkpointing 管会话内试验,Git 管项目正式历史。
十九、最佳实践:Checkpointing + Git 的配合方式
Best Practice: Combining Checkpointing with Git
Tony 给出的最佳实践非常合理:
-
在一个功能开发过程中
大胆使用 Checkpointing 做试验、回滚、重来 -
当完成一个稳定、满意、阶段性的成果
再使用git commit记录正式历史
一句话
Checkpointing 是临时草稿历史,Git 是正式档案历史。
二十、这一讲的真正升级点
The Real Upgrade in This Lecture
这一讲真正完成的,不只是教会你 /rewind。
而是让你从心理上完成一个升级:
你不再害怕让 AI 尝试较大规模的修改。
为什么这很重要?
因为 AI 真正能放大价值的地方,不只是:
- 写一个函数
- 改一行 bug
而是:
- 尝试方案
- 大胆重构
- 快速探索多个设计分支
如果没有回退机制,你就不敢放权。
没有放权,AI 价值就上不去。
所以 Checkpointing 实际上是:
AI 深度协作的胆量放大器。
二十一、这一讲和第 9 讲的关系
How This Lecture Connects to Lecture 09
第 9 讲讲的是:
事前约束
即:
- 不让 AI 越界
- 不让 AI 乱执行
- 把风险挡在行动前
第 10 讲补的是:
事后补救
即:
- 即使你批准了
- 即使 AI 改了
- 如果后悔了,还能回去
一句话对照
- 第 9 讲:防止坏事发生
- 第 10 讲:坏方向发生后能撤回
组合起来的意义
前两讲一起构成了完整的安全闭环:
行动前:Permissions + Sandbox
行动后:Checkpointing
也就是:
事前可控 + 事后可悔
这才是真正让 AI 成为“可驾驭伙伴”的关键。
二十二、适合 Checkpointing 的高价值场景
High-Value Use Cases for Checkpointing
除了课上的代码重构例子,Tony 的思考题也在引导你看到更广的场景。
这里可以总结几个非常适合用 Checkpointing 的日常场景。
场景 1:探索多个 API 设计方案
例如你要设计一个库接口,AI 连续给你:
- 函数式风格
- 面向对象风格
- option pattern 风格
你可以逐个尝试。
不满意就 rewind。
推荐模式
- 如果只是实现不满意:
Rewind code - 如果整个设计方向不满意:
Rewind code and conversation
场景 2:生成多个不同 UI 风格组件
例如让 AI 生成:
- 简洁风
- Material 风
- Tailwind 风
- 企业后台风
你可以一个个试。
推荐模式
- 想保留当前代码但换聊天分支:
Rewind conversation - 想彻底丢掉某个风格尝试:
Rewind code and conversation
场景 3:尝试性能优化方案
比如让 AI:
- 缓存优化一版
- 并发优化一版
- 数据结构替换一版
很多优化可运行,但可读性、收益、复杂度不一定平衡。
推荐模式
通常更适合:
Rewind code and conversation
因为性能优化往往涉及整体策略切换。
场景 4:自动生成测试但方案不理想
AI 可能生成:
- Mock-heavy 测试
- 表格驱动测试
- 集成测试风格
你可以试不同风格。
推荐模式
- 只是测试代码实现不好:
Rewind code - 连测试思路都要换:
Rewind code and conversation
二十三、本讲知识结构图
Knowledge Structure of This Lecture
上一讲解决“行动前如何约束”
↓
这一讲解决“行动后如何反悔”
↓
问题:AI 改动可能方向错误,但已批准
↓
需要低成本回退机制
↓
Checkpointing
↓
工作原理
├── 每次 Prompt 前自动快照
├── 保存代码状态
├── 保存对话状态
└── 像后台影子 Git 仓库
↓
通过 /rewind 回退
├── Rewind code
├── Rewind conversation
└── Rewind code and conversation
↓
作用
├── 消除重构恐惧
├── 降低试错成本
├── 提升探索意愿
└── 支持更大胆的 AI 协作
↓
边界
├── 不能撤销 Bash 副作用
├── 不能代替 IDE 全局 undo
└── 不能替代 Git
二十四、学霸速记表
Quick Revision Table
| 知识点 | 结论 |
|---|---|
| Checkpointing 解决什么 | AI 修改后“后悔”怎么办 |
| 触发时机 | 每次提交新 Prompt 前 |
| 保存内容 | 代码状态 + 对话状态 |
| 心智模型 | Claude Code 维护的影子 Git 仓库 |
/rewind 作用 |
在历史检查点间回退 |
| Rewind code | 回退代码,保留对话 |
| Rewind conversation | 回退对话,保留代码 |
| Rewind code and conversation | 代码和对话都回退 |
| 最大价值 | 消除重构恐惧,鼓励大胆试错 |
| 不能做什么 | 不能撤销 Bash 副作用 |
| 和 Git 的关系 | 互补,不替代 |
| 最佳实践 | 会话内用 Checkpointing,阶段成果用 Git commit |
二十五、学霸自检题
Self-Check Questions
基础题
- Checkpointing 的触发时机是什么?
- 它保存的是哪两类核心状态?
/rewind有哪三种模式?
进阶题
- 为什么
Rewind code适合“思路对、实现错”的场景? - 为什么
Rewind conversation是一个很特别但很有价值的能力? - 为什么 Checkpointing 不能替代 Git?
思辨题
- 在你自己的项目里,哪些任务最适合大胆试错并配合 Checkpointing?
- 如果 AI 帮你做一轮架构重组,你会在哪一步建立清晰的“阶段性满意点”?
- 你是否愿意因为有了 Checkpointing,而把更复杂的改造任务交给 AI?为什么?
二十六、学霸总结
Top-Student Summary
这一讲解决的是 AI 协作中的另一个核心信任问题:
不是“AI 会不会乱来”,而是“即使 AI 按要求做了,但我后来发现方向错了,能不能轻松反悔?”
Claude Code 给出的答案是 Checkpointing。
它本质上是一个由 Prompt 触发的、会话级的自动快照系统,在每次新指令开始前,为当前的:
- 代码状态
- 对话状态
同时建立一个绑定的历史切片。
借助 /rewind,开发者可以像操作时光机一样,在不同检查点间回退,并根据不同场景选择三种模式:
- Rewind code:保留讨论,重做实现
- Rewind conversation:保留代码,重开话题
- Rewind code and conversation:彻底抛弃错误分支,完整回到过去
Checkpointing 的真正价值,不只是“回滚方便”,而是它大幅降低了 AI 试错的心理成本。
当你知道自己随时可以回去,你就更敢让 AI:
- 做大重构
- 试不同方案
- 探索多个设计分支
因此,它本质上是:
AI 深度协作的信心放大器。
当然,Tony 也清晰划定了它的边界:
- 它不能撤销 Bash 命令的副作用
- 不能追踪你在外部编辑器中的全部手工修改
- 更不能替代 Git 作为正式版本控制系统
所以最合理的实践是:
用 Checkpointing 管会话内试验,用 Git 管项目正式历史。
与上一讲的 Permissions + Sandbox 配合后,Claude Code 的安全体系终于完整闭环:
- 事前约束
- 事后补救
这也让开发者真正具备了从“谨慎使用 AI”走向“大胆驾驭 AI”的底气。
二十七、一句话记忆
One-Sentence Memory Hook
Checkpointing 让 AI 协作从“做错了很麻烦”变成“做错了就回去”,它不是 Git 的替代品,而是你在探索式开发中最重要的时光机和后悔药。