☰
AI写坏了代码能撤销吗?用Waku的Git检查点实现对话级Rewind回退与Branch分支
2026/10/11 9:34:48 网站建设 项目流程

【免费下载链接】waku

⚡ A native app for all your coding agents.

项目地址:https://gitcode.com/gh_mirrors/waku/waku
点击查看免费下载

用 AI 编码代理写代码,最怕的就是它"一竿子捅到底"——一轮改完发现方向错了,代码、新文件、删掉的东西全混在工作区里,手动git checkout又对不上 AI 中途的每一步改动。Waku(一个本地优先的 AI 编码代理原生应用)用逐轮 Git 检查点解决了这个问题:每一轮对话结束都自动存档,你可以像撤回聊天消息一样,把整个工作区一键 Rewind(回退)到任意一条消息之前,也可以从那里 Branch(派生)出一个新任务,换条路继续走。

为什么 AI 改的代码不好手动撤销?

传统git revert只能撤销已提交的 commit,而 AI 代理干活的方式是:

  • 直接修改已跟踪文件,同时新建一堆未跟踪文件;
  • 一轮对话里可能改十几个文件,中途你还不清楚它具体动了什么;
  • 对话进行到第 5 轮才发现问题,但第 2、3 轮其实是对的——你想只回退后半段。

Waku 的答案是把"对话轮次"和"工作区快照"绑定起来:

每一轮任务开始前,Waku 会先拍下工作区的照片;任务结束后再拍一张,并自动算出这一轮的增删行数。照片存在 Git 自己的refs/waku/命名空间里,不产生任何可见的分支或提交。

整个实现见 checkpoint.rs,几个对新手很友好的细节:

  • ✅未跟踪文件也存档:AI 新建但还没git add的文件,回退时能一起恢复;
  • ✅不碰你的暂存区:快照使用独立的临时 Git 索引,你git add过的东西不会被干扰;
  • ✅每轮改动一目了然:检查点自带按文件的+增 -删统计(diff --numstat),你知道 AI 每轮到底动了哪些文件。

一键 Rewind:把代码和对话同时拉回任意消息

在对话流里把鼠标悬停在某条用户消息上,会出现一个回退按钮(界面文案"回退到这里"),点击后 Waku 会做四件事:

  1. 安全快照:先把"当前(可能已经被改坏的)状态"备份一份refs/waku/rewind-backup-*,保证回退操作本身永远不会把你的现场弄丢;
  2. 恢复工作区:把文件内容、暂存区、未跟踪文件整体还原到那轮任务开始前的检查点;
  3. 回退代理会话:把 AI 自己的对话历史也截断到对应位置(例如 Claude 会把转录文件重写截断、Grok 通过 ACP fork 会话实现),保证回退后 AI"记得"的上下文和代码状态一致;
  4. 清理后续检查点:被抹掉的轮次,其检查点引用一并删除,仓库不膨胀。

成功后任务标题会带上"(回退)"标记,提示你这是一条被回退过的对话线。整个流程实现在 daemon.rs 的rewind_session_to_message,UI 侧的回退按钮在 transcript.tsx。

使用 Rewind 的 3 个前提

  • 📁 任务所在目录必须是Git 仓库——检查点建立在 Git 对象库之上,非 Git 目录会提示"缺少该消息发送前的 Git 检查点";
  • ⏸️ 当前轮次必须已停止(界面会提示"请先停止当前这一轮,再回退对话");
  • 🤖 代理需支持会话回退。Waku 已适配 Claude Code、Amp、Grok、Cursor 等;个别代理(如 Fx、Kimi Code)暂时不支持,此时回退/派生入口会被自动隐藏,而不是给你一个会静默失败按钮(各代理的支持矩阵见 providers.md)。

Branch:从任意一轮派生新任务,平行尝试两种方案

Rewind 是"撤销",Branch(界面文案"从此处派生任务")则是"分叉":

  • 在任意回复上选择从此处派生任务,Waku 会创建一个新任务,完整继承前 N 轮对话,并把源任务的检查点引用拷贝到新任务名下(copy_session_refs);
  • 原任务保持不动,新任务从分叉点继续——比如让 AI"换一种更简洁的重构方案";
  • 因为新任务持有独立的 Git 引用,两条任务线各自回退、各自推进,互不干扰。

Claude 的派生会借助其原生转录检查点(claude_session.rs),若检查点缺失会明确报错"Claude 未返回派生任务所需的检查点",而不是生成一个历史残缺的假分叉。

💡 顺带一提:Waku 还有一个"分支"面板,可以查看、切换、一键创建并签出项目的Git 分支(实现在 git_branch.rs)——它管的是代码分支,与对话派生是两个层面的"Branch",配合使用正好:对话 Branch 探索方案,Git 分支落地代码。

这些功能在哪里看源码

模块说明
checkpoint.rsGit 检查点的捕获、恢复与批量引用管理
daemon.rsRewind 与 Branch 的服务端编排(含安全快照兜底)
claude_session.rsClaude 原生转录检查点与会话截断
providers.md各代理对回退/分支的支持情况与技术细节
transcript.tsxWeb 端对话流中的回退与派生交互

小结

  • 🕘每轮自动存档:对话轮次 ↔ Git 快照一一对应,未跟踪文件也包含;
  • ⏪Rewind 回退:代码 + AI 记忆一起拉回任意消息之前,且自带回退前安全快照,操作不可逆风险为零;
  • 🌿Branch 派生:从任意一轮分叉新任务,平行验证不同实现方向;
  • 🔒本地优先:所有检查点都写在项目自己的.git里,不依赖任何远程服务。

下次 AI 又"写坏了代码",先别慌——在 Waku 里,回退它比撤回一条微信消息还简单。

【免费下载链接】waku

⚡ A native app for all your coding agents.

项目地址:https://gitcode.com/gh_mirrors/waku/waku
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询