回滚
在 AI 任务期间自动为工作区文件建立版本。安全地探索 AI 建议并试验修改,同时轻松恢复不需要的更改。
什么是回滚
回滚让你可以:
- 安全地试验 AI 建议的更改
- 轻松从不需要的修改中恢复
- 比较不同的实现方案
- 在不丢失工作的情况下恢复到之前的项目状态
回滚的工作原理
Bob 在任务执行期间捕获文件的快照,与你的主要版本控制系统分开存储。这些快照在文件修改前自动创建,确保你随时可以撤销不需要的更改。
快照在任务开始时和文件修改前进行记录。
使用回滚
回滚通过聊天界面直接集成到你的工作流程中,并直接显示在聊天记录里。快照在文件修改前创建,方便随时撤销任何更改。
每个快照提供两项主要功能,在聊天记录和回滚菜单中始终可用:
查看差异
要查看任务中哪些文件发生了更改:
- Bob 编辑文件后,已更改的文件视图将以折叠状态显示。
- 你可以点击展开。
- 在视图中查看差异:
- 使用显示全部查看任务中所有已更改的文件
- 可以点击特定文件查看其更改内容
恢复快照
无论是否检测到更改,恢复选项始终在回滚按钮和对话框中可见。这确保你随时可以恢复到任意状态。
要将项目恢复到之前的状态:
- 将鼠标悬停在任意用户消息上,使用回滚按钮,这将把更改的文件恢复到该消息之前的状态。
- 点击已更改的文件视图中各个文件上的回滚按钮,这将让 Bob 知道你已撤销某个文件。
限制
- 范围:回滚只捕获在 Bob 活跃任务期间所做的更改。
- 外部更改:在任务外部所做的修改(手动编辑、其他工具)不包含在内。
- 大文件:非常大的二进制文件可能会影响性能。
- 未保存的工作:恢复会覆盖工作区中任何未保存的更改。
- 时机:快照在更改应用前创建,为所有修改提供安全保障。
- 内存使用:快照会随时间积累,可能消耗大量内存,尤其是大型项目或长时间运行的任务。如果你有许多带有快照的旧任务,可以定期清理以释放内存。你可以通过删除旧的任务对话来实现,这会同时移除相关的快照。
技术实现
回滚架构
回滚系统由以下部分组成:
- 回滚服务:通过以下方式处理文件操作和状态管理:
- 快照的创建和存储
- 差异计算
- 状态恢复
- UI 组件:显示在聊天中的界面元素,支持与回滚的交互。
恢复流程
当恢复运行时,Bob:
- 完成对特定任务中指定时间点的重置。
- 更新内部回滚跟踪状态。
存储类型
回滚以任务为范围,这意味着每个快照都特定于单个任务。
差异计算
回滚比较使用 Git 的底层差异功能生成结构化的文件差异:
- 修改的文件显示逐行更改。
- 二进制文件被正确检测和处理。
- 重命名检测可能受到限制;差异重点关注快照之间的文件内容变化。
- 文件的创建和删除清晰标识。
文件排除和忽略模式
回滚系统使用智能文件排除,只跟踪相关文件。
内置排除项
系统具有内置的排除模式,会自动忽略:
- 构建产物和依赖目录(
node_modules/、dist/、build/)。 - 媒体文件和二进制资产(图片、视频、音频)。
- 缓存和临时文件(
.cache/、.tmp/、.bak)。 - 包含敏感信息的配置文件(
.env)。 - 大型数据文件(压缩包、可执行文件、二进制文件)。
- 数据库文件和日志。
.gitignore 支持
回滚系统遵守工作区中的 .gitignore 模式:
- 被
.gitignore排除的文件不会触发快照创建。 - 被排除的文件不会出现在回滚差异中。
- 暂存文件更改时应用标准 Git 忽略规则。
.bobignore 行为
.bobignore 文件(控制 AI 对文件的访问)与回滚跟踪是分开的:
- 被
.bobignore排除但未被.gitignore排除的文件仍会被回滚捕获。 - AI 无法访问的文件的更改仍可通过回滚恢复。
这种分离是有意为之的。.bobignore 限制 AI 可以访问的文件,而不是应该为版本历史跟踪的文件。
这个主题怎么样?