Checkpoints:给 Claude Code 装个后悔药

用 Claude Code 写代码,最崩溃的不是写不出来,是写崩了回不去。这篇聊聊我怎么从"每次改炸了就 /clear 重来"进化到"用 Checkpoints 秒回滚"的。

Summary: 用 Claude Code 写代码,最崩溃的不是写不出来,是写崩了回不去。这篇聊聊我怎么从"每次改炸了就 /clear 重来"进化到"用 Checkpoints 秒回滚"的。


我第一次意识到"回滚"有多重要,是在一次深夜重构。

当时在改一个支付回调的处理逻辑,改到一半发现越改越乱。我想退回到二十分钟前的版本,但是——

没有版本控制,没有快照,什么都没有。

Claude Code 的对话是线性的。你往前翻,能看到所有历史,但是你不能一键回到某个时间点的状态。往上翻聊天记录截图给 Claude 看?它只会说"让我看看这段代码"然后继续在当前上下文里发挥。

那天晚上我 /clear 了三次。最后一次 /clear 之后,我看着空白的对话窗口,突然觉得:我为什么不先 git commit 一下呢?

但 git commit 解决不了一个问题:Claude Code 的对话状态本身没有版本控制。你 /clear 之后,之前讨论的方案、生成的代码片段、调试的中间结论——全没了。

后来我才发现,Claude Code 有 Checkpoints。

什么是 Checkpoints

简单说,Checkpoints 是 Claude Code 对话状态的快照。

你可以随时创建一个 checkpoint,相当于给当前 session 拍了一张"存档"。之后不管你怎么改、怎么崩,都可以一键回滚到这个存档点。

这个功能藏得比较深,很多人用了一两个月都不知道它的存在。

它的工作方式很像 Git 的 commit,但是针对的是对话状态:上下文、生成的代码、Claude 对你的项目的理解程度——所有这些都被打包进一个 checkpoint 里。

具体怎么用

创建 checkpoint

在 Claude Code 里,创建 checkpoint 很简单:

/checkpoint create 重构支付回调前

这行命令会创建一个名为"重构支付回调前"的 checkpoint。Claude 会回复说"Checkpoint 已创建"。

查看所有 checkpoints

/checkpoint list

你会看到类似这样的输出:

Checkpoints:
  1. 重构支付回调前 (2026-06-23 14:32)
  2. 修复订单超时问题后 (2026-06-23 10:15)
  3. 初始状态 (2026-06-23 09:00)

回滚到某个 checkpoint

/checkpoint restore 1

这条命令会把当前 session 恢复到"重构支付回调前"那个状态。上下文、生成的代码、所有中间结论——全部回到 checkpoint 创建时的样子。

我第一次用的时候,看着 Claude 恢复到之前的代码状态,整个人都放松了。那种感觉很像你在玩塞尔达传说,终于找到了一个可以回血的神庙。

删除不需要的 checkpoint

/checkpoint delete 2

清理掉没用的存档,保持列表整洁。

我常用的 workflow

改代码前的"安全点"

现在我的习惯是:每次要做比较大的改动之前,先创建一个 checkpoint。

/checkpoint create 改之前

然后放心大胆地改。改崩了没关系,/checkpoint restore 回来。

这跟我写代码前 git commit 的习惯一模一样。只不过 git 管的是代码文件,checkpoint 管的是整个对话状态。

多方案对比

有时候我对同一个问题有两个方案,不确定哪个更好。

我会先创建 checkpoint A,按方案一聊一轮。然后创建 checkpoint B,回到 A,按方案二聊一轮。

对比完两个方案的结果,直接选最好的那个继续。中间过程不需要 /clear,也不需要重新对齐上下文。

这比"在两个 session 里分别试"效率高多了。因为两个方案共用同一个代码库上下文,Claude 对项目的理解是连续的。

配合 /compact 使用

我之前写过 /compact 的用法。Checkpoint 和 /compact 可以配合使用。

我的习惯是:每个阶段做完,先 /compact 压缩上下文,然后创建一个 checkpoint。这样既省 token,又保留了状态回溯的能力。

如果之后需要回滚,回滚到 checkpoint 之后发现上下文太短,再手动补充关键信息就行。

Tricks

Trick 1:用命名约定组织 checkpoints

不要用默认的编号命名,也不要写太随意。

我给自己定了个规矩:checkpoint 的命名要能回答"这个状态是什么"这个问题。

好的命名:

/checkpoint create 重构前-订单模块通过所有测试
/checkpoint create 修复后-支付回调超时问题已解决
/checkpoint create 实验性-尝试用消息队列异步处理

坏的命名:

/checkpoint create 1
/checkpoint create 测试
/checkpoint create 123

以后你 checkpoint list 的时候,好的命名能让你一眼看出来每个存档代表什么。

Trick 2:在关键决策点强制创建 checkpoint

不是只有大改动前才需要 checkpoint。

每次你让 Claude 做了一个"不可逆"的动作之后,都应该创建一个 checkpoint。比如:

  • Claude 修改了一个核心配置文件
  • Claude 执行了一个数据库迁移脚本
  • Claude 删除了一批文件

这些操作做完之后,先创建 checkpoint,再继续下一步。万一下一步出了问题,你能准确回滚到"修改前"、"迁移前"、"删除前"。

Trick 3:checkpoint 和 git commit 配合使用

最稳的 workflow 是两者结合:

  1. git commit 保存代码状态
  2. /checkpoint create 保存对话状态

代码和对话都有版本控制。之后不管出什么问题,你都能回到任何一个时间点。

我现在的习惯是:每完成一个功能点,先 git commit,再创建 checkpoint。两步加起来十秒钟,但是能省掉后面数小时的痛苦。

注意事项 / 踩坑

坑一:checkpoint 不会自动创建

这是最大的坑。

很多新人以为 Claude Code 会自动保存对话状态,就像 IDE 会自动保存文件一样。不会。

Checkpoint 需要你手动创建。如果你忘了创建,改崩了就只能 /clear 重来。

我给自己定了个规矩:只要对话进入"执行"阶段(Claude 开始改代码),就必须先创建 checkpoint。不创建就不让 Claude 动手。

坑二:checkpoint 的大小有限制

一个 checkpoint 包含整个对话上下文。如果你的 session 已经用了很多 token,创建 checkpoint 会占用不少空间。

Claude Code 对 checkpoint 的总数有限制。默认情况下,你最多保留 20 个 checkpoint。超过之后,最早的会被自动删除。

如果你经常用 checkpoint,记得定期清理不需要的存档。

/checkpoint list    # 看看哪些不需要了
/checkpoint delete 3 # 删掉

坑三:回滚后 Claude 的"记忆"可能不准

回滚到某个 checkpoint 之后,Claude 的对话状态回到了那个时间点。但是,磁盘上的文件已经被你改过了。

这时候 Claude 可能会发现"代码库跟它记忆中的不一样"。

典型场景:

  1. 你创建了 checkpoint A
  2. Claude 基于 A 的状态改了三个文件
  3. 你回滚到 A
  4. 磁盘上的三个文件还是修改后的版本,但 Claude 以为它们没被改过

这时候需要让 Claude 重新读一遍代码库,或者手动把文件恢复到 checkpoint 对应的时间点。

我一般会在回滚之后说一句"重新读取当前代码状态",让 Claude 重新同步磁盘和内存。

坑四:不要在多人协作的 session 里滥用 checkpoint

Checkpoint 是你个人的存档。如果你在一个共享 session 里工作(比如 Claude Code 的 team 模式),你的 checkpoint 回滚会影响其他人的对话状态。

目前来看,团队模式下的 checkpoint 行为还不太稳定。如果多人同时在一个 session 里工作,回滚你的 checkpoint 可能会导致其他人的上下文丢失。

我的建议:多人协作时,尽量用 git + 代码评审来管理状态,不要依赖 checkpoint。

一个反直觉的事实

很长一段时间里,我以为"专业开发者"的标志是写代码快、不犯错。

后来我才明白:真正的区别在于出错之后的恢复速度

一个不会回滚的开发者,改崩了只能硬着头皮继续,或者 /clear 重来。一个会用 checkpoint 的开发者,改崩了一秒回滚,再试一次方案二。

Checkpoint 给我的不是"不犯错"的能力,而是"犯错成本几乎为零"的自由。

这种自由带来的改变是:我敢尝试更大胆的方案,敢在不确定的时候多走几条路,敢让 Claude 做一些"可能不行"的尝试。

因为我知道,不行就回滚。

/claude、/compact、Checkpoints 这三个功能放在一起,构成了 Claude Code 的"状态管理铁三角"。

/claude 解决"怎么跟 Claude 说清楚"的问题。

/compact 解决"说清楚之后怎么保持"的问题。

Checkpoints 解决"保持不住的时候怎么回滚"的问题。

好,今天聊到这儿。接下来聊聊 Skills——按需加载的知识包,怎么让 Claude Code 变成你的专属专家。


Published: https://betterpursue.blogspot.com/2026/06/checkpoints.html

评论

此博客中的热门博文

我写了半年 prompt,这是我发现的最好的技巧