回滚

在 AI 任务期间自动为工作区文件建立版本。安全地探索 AI 建议并试验修改,同时轻松恢复不需要的更改。

什么是回滚

回滚让你可以:

  • 安全地试验 AI 建议的更改
  • 轻松从不需要的修改中恢复
  • 比较不同的实现方案
  • 在不丢失工作的情况下恢复到之前的项目状态

回滚的工作原理

Bob 在任务执行期间捕获文件的快照,与你的主要版本控制系统分开存储。这些快照在文件修改前自动创建,确保你随时可以撤销不需要的更改。

快照在任务开始时和文件修改前进行记录。

使用回滚

回滚通过聊天界面直接集成到你的工作流程中,并直接显示在聊天记录里。快照在文件修改前创建,方便随时撤销任何更改。

每个快照提供两项主要功能,在聊天记录和回滚菜单中始终可用:

查看差异

要查看任务中哪些文件发生了更改:

  1. Bob 编辑文件后,已更改的文件视图将以折叠状态显示。
  2. 你可以点击展开。
  3. 在视图中查看差异:
    • 使用显示全部查看任务中所有已更改的文件
    • 可以点击特定文件查看其更改内容

恢复快照

无论是否检测到更改,恢复选项始终在回滚按钮和对话框中可见。这确保你随时可以恢复到任意状态。

要将项目恢复到之前的状态:

  1. 将鼠标悬停在任意用户消息上,使用回滚按钮,这将把更改的文件恢复到该消息之前的状态。
  2. 点击已更改的文件视图中各个文件上的回滚按钮,这将让 Bob 知道你已撤销某个文件。

限制

  • 范围:回滚只捕获在 Bob 活跃任务期间所做的更改。
  • 外部更改:在任务外部所做的修改(手动编辑、其他工具)不包含在内。
  • 大文件:非常大的二进制文件可能会影响性能。
  • 未保存的工作:恢复会覆盖工作区中任何未保存的更改。
  • 时机:快照在更改应用前创建,为所有修改提供安全保障。
  • 内存使用:快照会随时间积累,可能消耗大量内存,尤其是大型项目或长时间运行的任务。如果你有许多带有快照的旧任务,可以定期清理以释放内存。你可以通过删除旧的任务对话来实现,这会同时移除相关的快照。

技术实现

回滚架构

回滚系统由以下部分组成:

  1. 回滚服务:通过以下方式处理文件操作和状态管理:
    • 快照的创建和存储
    • 差异计算
    • 状态恢复
  2. UI 组件:显示在聊天中的界面元素,支持与回滚的交互。

恢复流程

当恢复运行时,Bob:

  • 完成对特定任务中指定时间点的重置。
  • 更新内部回滚跟踪状态。

存储类型

回滚以任务为范围,这意味着每个快照都特定于单个任务。

差异计算

回滚比较使用 Git 的底层差异功能生成结构化的文件差异:

  • 修改的文件显示逐行更改。
  • 二进制文件被正确检测和处理。
  • 重命名检测可能受到限制;差异重点关注快照之间的文件内容变化。
  • 文件的创建和删除清晰标识。

文件排除和忽略模式

回滚系统使用智能文件排除,只跟踪相关文件。

内置排除项

系统具有内置的排除模式,会自动忽略:

  • 构建产物和依赖目录(node_modules/dist/build/)。
  • 媒体文件和二进制资产(图片、视频、音频)。
  • 缓存和临时文件(.cache/.tmp/.bak)。
  • 包含敏感信息的配置文件(.env)。
  • 大型数据文件(压缩包、可执行文件、二进制文件)。
  • 数据库文件和日志。

.gitignore 支持

回滚系统遵守工作区中的 .gitignore 模式:

  • .gitignore 排除的文件不会触发快照创建。
  • 被排除的文件不会出现在回滚差异中。
  • 暂存文件更改时应用标准 Git 忽略规则。

.bobignore 行为

.bobignore 文件(控制 AI 对文件的访问)与回滚跟踪是分开的:

  • .bobignore 排除但未被 .gitignore 排除的文件仍会被回滚捕获。
  • AI 无法访问的文件的更改仍可通过回滚恢复。

这种分离是有意为之的。.bobignore 限制 AI 可以访问的文件,而不是应该为版本历史跟踪的文件。

这个主题怎么样?