分支與檢視

分支工作階段是一個在自己的 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 用戶端在工作階段的長按選單中提供新增工作樹…,會開啟同一個分支面板。在它們出現分支選單的地方,捨棄分支…會以一個子選單捨棄——這無法還原取代確認對話框。