分支与审查

分支会话是一个在自己的 git 分支上、在它来源文件夹的自有签出目录中工作的会话。在底层这是一个 git 工作树:同一个仓库的第二份工作副本,共用历史但有自己的文件与索引。你在原本会话里的工作不会被碰到。分支准备好时,你就从这个会话本身把它合并回去。

当你想在主要工作路线旁试一个想法、把一项任务拆给几个不会互相踩到未提交文件的代理,或是让代理去探索某件你也许会丢掉的事情时,就用分支。

本章也涵盖审查窗口,它适用于任何有文件夹的会话,不论是否为分支。

开始一个分支

任何有文件夹的会话都可以分支:

  • 在侧边栏点右键并选择新建分支…
  • 在会话标题栏的 ⋯ 菜单中选择新建分支…
  • 在 ⌘K 面板中选择新建分支…,它会作用于舞台上的会话

新建分支面板写着“一个自己的会话,位于 文件夹 的一份副本上,拥有自己的 git 分支。你在“会话”里的工作不会被碰到;准备好时把它合并回去。”它包含这些部分:

字段用途
它要做什么?新会话的第一条消息,例如“试着把会话缓存改成 SQLite”。留空则以空闲状态打开代理。
名称会话的名称,也是分支名称的来源。留空则从消息取名。
代理在分支中运行的代理。默认是你所分支的那个会话的代理。
起点起始的分支。第一项是该文件夹当前的分支“分支(当前)”,在分离的签出状态下则是当前的提交。接着是其他本地分支,最近提交的排在前面。见下方注意事项。
  • 起点(当前的分支): “从它的最新提交开始——未提交的更改会留在原处。合并时会回到它。”
  • 起点(另一个分支): “从 分支 的最新提交开始,并合并回 分支。”你选的起点分支,也就是这个会话合并回去的分支。

在这些字段下方,面板会显示它将创建的分支 wt/<名称>。名称会转为小写,其他字符会变成连字符。点击启动(⌘⏎)。

注意: 只有已提交的工作才会被分支。原文件夹中未提交的更改会留在那里,不会被复制到新的签出目录。

面板会先检查什么

面板会向机器询问那个文件夹是什么(“正在检查 文件夹…”),并随之调整:

  • 是一个仓库: 就是上面描述的起点选择器。若该仓库有 .worktreeinclude 文件,面板会加上“也会按 .worktreeinclude 所述一并复制:…”并列出其中的文件。这些是 git 不追踪的文件,例如本地的 .env,会被复制到新的签出目录。
  • 是一个还没有提交的仓库: “该仓库还没有任何提交,因此分支会从一个空的初始提交开始。文件夹里的文件会留在原处。”
  • 不是仓库: “文件夹 还不是 git 仓库,而分支需要一个。”勾选**把它变成仓库(git init)**就会在那里运行 git init。“文件夹里的一切会进入一个初始提交,分支就从那里开始。”若未勾选此框,启动会是禁用的。
  • 机器未在运行: “机器未在运行——文件夹会在它启动后检查。”若不是 git 仓库,就把它变成仓库这个选项会在机器启动后生效。

提示: 代理也可以开始分支,使用 bromure-delegation MCP 服务器的 worktree_create 工具。这样的分支看起来与你自己开始的完全一样。见代理协同工作。

分支会话

分支会话在侧边栏中嵌套于它的来源会话之下。它那一行会加上一个分支字符与一行状态,例如“3 个提交”。状态行会计算:

  • 领先来源分支的提交数(“1 个提交”、“n 个提交”)
  • 未提交的文件(“n 个未提交文件”)
  • 落后的提交数(“落后 n 个”)

在第一次更改之前,它会显示“还没有更改”。只要机器在运行中,这些计数大约每 20 秒就会从机器读取一次。

在会话标题栏中,文件夹旁边有一个标签显示分支名称与同样的计数。把光标移上去可读到“它自己的 git 分支,出自 父分支——准备好时把它合并回去”。

舞台上的分支会话“退款 webhook 重试”,状态为就绪:标题栏显示 @refunds · 就绪 · 6 分 · Claude Code · Payments API · ~/payments-api · refund-retries 3 个提交,右侧有一个“合并到 main”拆分按钮。侧边栏那一行嵌套在它的房间中,显示一个分支字符与“就绪 · 3 个提交”。

合并

分支一有更改,标题栏就会显示一个拆分按钮合并到 父分支。

点击主要部分,就会把分支合并回它的来源分支。接着签出目录与分支会被移除,会话会被归档。该会话仍可阅读,状态行会是“已合并到 父分支”。

箭头部分会打开其他选项,它们也在会话 ⋯ 菜单与右键菜单的分支区段里:

项目作用
查看更改打开审查窗口。
合并到 父分支与按钮相同(仅在菜单中)。
压缩并合并到 父分支把整个分支作为一个提交落地(“压缩合并 分支”),然后移除签出目录。
合并,继续在分支上工作进行合并,但保留签出目录、分支与会话,让代理可以继续。
创建拉取请求请代理提交尚未提交的内容、推送分支,并用 gh pr create 对父分支创建一个拉取请求。它会回复 URL。这需要机器上有 GitHub 凭据。见凭据。
在此打开终端在该分支的签出目录中开一个 Linux 终端。
丢弃分支…在确认后删除签出目录、分支与会话。

一次合并的流程是这样的:

  1. 干净的分支会立即合并。 进行中时,标题栏显示“正在合并到 父分支…”。
  2. 未提交的工作或冲突会交给代理。 当分支有未提交的文件,或合并发生冲突时,Bromure 会把合并退回,让一切保持干净。接着它会在对话中请这个会话自己的代理提交工作、进行合并并解决任何冲突。标题栏会显示“正在合并到 父分支——代理正在收尾”,你可以在聊天中跟着看。若机器上的 git 没有身份设置,合并提交会以 Bromure <bromure@localhost> 的名义创建。
  3. Bromure 会先确认合并确实落地,才会移除任何东西。若 30 分钟后仍未落地,状态会变成合并停滞:“合并在 30 分钟后仍未落地——问问代理进展如何。”按钮则会变成重试合并。

你退出时正在进行的合并,会在下次启动时继续。

当代理请求合并

代理可以用 worktree_merge 工具请求合并某个分支。它可以为自己的分支请求,或为从它的会话开始的分支请求。它绝不会自行合并。会话标题栏下方会出现一条横幅:“代理 请求把 分支 合并到 目标”。下面那一行会给出分支的计数、若代理要求压缩则显示“作为一个压缩后的提交”,以及“落地后签出目录就会被移除。”

  • 查看更改会打开审查窗口。
  • 暂不表示拒绝。会告知代理除非你再提起,否则不要再问。
  • 合并(或压缩并合并)会如上所述执行合并。落地后,会通知提出请求的代理。

归档或删除分支会话

归档或删除工作尚未合并的分支会话时,会问你这个分支要怎么处理:“归档“会话”——连同它的分支?”或“删除“会话”——连同它的分支?”。

  • 保留分支会把签出目录与分支留在机器上,让你之后可以合并或接手。机器不再会在开机时打开它。恢复该会话时会再次打开它。
  • 丢弃分支会连同会话删除签出目录与分支。“分支 有尚未合并的工作(…)”会告诉你将失去什么。

若这个分支上什么都还没做(“分支 上还没有做过任何事,因此移除它不会失去什么。”),丢弃分支会是默认选项。

用**丢弃分支…**明确丢弃时,一定会先确认:“要丢弃“会话”吗?分支 分支 与它的签出目录会连同会话一起删除。这无法撤销。”

机器上的分支

一旦分支的会话被归档、合并或消失,分支就很容易被遗忘。**此机器上的分支…**会打开一个窗口,列出 Bromure 在某台机器上创建的每一个分支。你可以在会话标题栏的 ⋯ 菜单中,以及在标题栏上对机器胶囊点右键时找到它。

这个窗口标题为“机器 上的分支”,并计数“n 个分支 · n 个被留下”。每一行显示:

  • 分支名称,以及它属于谁:在会话中、会话已暂停、会话已归档、已合并,或没有会话
  • 分支、一个箭头,以及它要合并进去的分支
  • 它有哪些内容,以及最后一次提交的时间
  • 它在机器上的签出路径

每一行的操作取决于这个分支属于谁:

  • 有会话的分支:查看与显示会话。
  • 没有会话的分支:在会话中打开。这会在该分支的签出目录中启动机器的默认代理。新的会话是完整的分支会话,所以合并、审查与丢弃都能用。
  • 垃圾桶按钮“丢弃这个分支与它的签出目录”会先确认。若该分支有一个已归档的会话,那个会话也会被删除。

仅显示没有会话的会把列表缩到被留下的那些分支。⌘R 刷新。分支是实时从机器读取的,所以机器必须在运行中:“分支是实时从机器读取的——请启动它并刷新。”

审查窗口

审查窗口把一个会话的更改显示为差异,并让你在上面加评论。它不只适用于分支。打开它有三种方式:

  • 查看更改,从会话的 ⋯ 菜单、分支菜单、⌘K 面板,或合并请求横幅。
  • 聊天中代理回复下方的已更改 … 个文件那一行。此时窗口只会针对那一轮所更改的文件打开(“本轮更改”)。点击全部显示可看到全部,点击本轮可再缩回。
  • 分支窗口中的查看。

窗口标题是“审查 — 会话”。它的各个部分:

  • 比较对象选择器(“这些更改是与什么比较”):
    • 自 父分支 起只用于分支会话,也是它们的默认。它显示分支有而父分支没有的一切。
    • 未提交显示尚未提交的更改。这是其他会话的默认。
    • 上一次提交显示最近的那次提交。
  • 文件列表显示有几个文件更改、带进度条的“已查看 n / n”,以及该分支的提交。git 尚未追踪的新文件也包含在内并计入(“n 个新文件尚未加入 git”)。点击文件可跳到它。
  • 标记为已查看。 每个文件旁的圆圈可把它标记为看过,该文件就会折叠。这个标记与该文件当前的差异绑在一起,所以文件若再次更改,标记就会回来。
  • 差异。 把光标移到某一行就能为它加评论。你也可以为单一文件加评论(“对这个文件的评论”),或在底部字段对整个更改加评论。
  • 标题栏有一个刷新按钮(⌘R)与打开终端,分支会话还会多一个合并按钮。

评论

你加入的评论(⏎)是草稿:“它会和其他草稿一起等到你送出”。⌥⏎ 插入换行。× 可移除草稿。

把 n 条评论发给代理(⇧⌘⏎)会把所有草稿作为一条编号消息发给该会话的代理,每条评论都附上文件与行号,并请代理处理它们。若代理未在运行,这条消息会把它恢复。已送出的评论会留在窗口中并标注“已发送”。评论与已查看标记会随会话一起保存,关闭窗口后依然保留。

更改是实时从机器读取的。若机器已关机,窗口会显示“无法连上机器”:请启动机器并刷新。

注意: 编码任务使用同一个审查窗口,并带有任务专属的按钮,例如附上 n 条评论退回。

机器终端

机器的 Linux 终端标签页仍保有较旧的工作树操作:工作区菜单中的新建工作树(⇧⌘G)、合并工作树(⇧⌘M)与附加终端。见机器。对代理的会话而言,上面那些分支操作取代了它们。

在镜像服务器与 iOS 上

分支会话、合并、合并请求横幅、审查窗口与分支窗口,在镜像另一台 Mac 的胖客户端窗口中都能运作。iPhone 与 iPad 客户端在会话的长按菜单中提供新建工作树…,会打开同一个分支面板。在它们出现分支菜单的地方,丢弃分支…会以一个子菜单丢弃——这无法撤销取代确认对话框。