在 Vibe Coding 过程中,经常遇到这样的场景:
- 修改失控: Claude 修改了多个文件,但效果不尽如人意,我们想回溯到本轮对话之前的状态
- 代码审计: 你需要记录 Claude 每一轮的修改细节,以便后续进行 Code Review
针对这两个需求,可以结合使用 Claude Checkpointing(原生检查点)与 Git 自动化钩子。
版本:claude code: 2.0.75
检查点
- Claude Checkpointing 回滚
- 双重回滚:当你使用 /rewind 或恢复检查点时,它不仅会将文件恢复到之前的状态,还会让 Claude '忘记' 刚才的对话。
- 上下文同步:这保证了 AI 的记忆与当前文件状态是完全同步的
- Git 回滚
- 单向回滚:如果你在对话中途手动执行 git reset 回滚代码,Claude 依然记得它刚才修改了代码。
- 脑裂风险:此时 AI 的记忆(Context)显示代码已修改,但文件系统(Files)显示代码未修改。这会导致 Claude 产生幻觉,或者在后续修改中覆盖掉你的回滚
| 检查点 | Git | |
|---|---|---|
| 主要用途 | 实验与纠错。\n'Claude 你刚才改乱了,回到两分钟前重新试一次。' | 存档与日志。\n'我完成了这部分功能,先存个档,以防万一。' |
| 回滚范围 | 文件 + AI 记忆 (Context Window) | 仅 文件 (Filesystem) |
| 持久性 | 临时。通常随会话结束或时间推移被清理 | 永久。保存在 .git 历史中,随时可以找回。 |
| 可读性 | 较差。主要用于机器回滚,用户很难直观看到差异 | 极佳。可以通过 git log 或 GUI 工具查看详细 Diff。 |
| 外部访问 | 仅能在 Claude Code 终端内访问。 | 可以在 VS Code、GitHub、其他 IDE 中访问。 |
Git 自动化钩子
1. 工作原理
- 利用 Stop 钩子,在 Claude 完成一轮对话或任务后 自动触发。
- 执行 commit_per_turn.sh 脚本。
- 脚本逻辑:
- 检测并初始化 Git 仓库(如果不存在)。
- 检测是否有文件变动(无变动则跳过)。
- 自动切换或创建 claude 专属分支(避免污染主分支)。
- 生成变更摘要并提交


