> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bricks.tools/llms.txt
> Use this file to discover all available pages before exploring further.

# 工作樹

> 在獨立的 git 工作樹中以專屬分支執行對話

在專案的獨立 [git 工作樹](https://git-scm.com/docs/git-worktree)中執行對話。每個工作樹都是一個獨立的分支，並在 `.bricks/worktrees/` 下擁有自己的檢出，因此代理可以在分支上建置與實驗，而不會動到您的主要檢出或其他任何對話。滿意後再將成果合併回去。

<Info>
  工作樹僅適用於 Git 儲存庫中的專案。否則不會顯示工作樹選擇器。
</Info>

## 選擇工作樹

工作樹標籤（一個分支圖示加上目前的目標名稱）會顯示在專案對話的輸入列中，與其他選擇器並列。它顯示對話執行所在的工作樹，預設為**主分支**。

只有在對話尚未開始時才能變更目標。一旦對話有了訊息，工作樹就會鎖定：標籤仍會顯示，但不再可開啟（其工具提示為「此對話使用的工作樹（開始後鎖定）」）。

點選標籤可在下列項目間選擇：

* **主分支**：專案的主要檢出
* 既有的工作樹，列在**工作樹**標題下
* **新增工作樹…**：建立一個全新的工作樹

<Note>
  工作樹選擇器是以專案為單位。[Main Chat](/zh-Hant/ctor/guide/main-chat) 沒有工作樹目標。
</Note>

## 建立工作樹

選擇**新增工作樹…**開啟**新增工作樹**對話框。

* 輸入選填的**名稱**。在您輸入時，即時預覽會顯示它對應到的分支與資料夾：`.bricks/worktrees/<名稱>`。名稱會被轉為 slug（全部轉為小寫，空格與其他字元會收合為 `-`，上限 60 個字元）。
* 將名稱留空即可取得自動產生的名稱，例如 `brave-otter`。
* 點選**建立**。CTOR 會從專案的預設分支建立分支與獨立檢出，接著在其中執行 `bun install`。對話會自動切換到新的工作樹。

若建立失敗，會回復未完成的工作樹，讓您重試時從乾淨的狀態開始。

您建立的第一個工作樹會將 `.bricks/worktrees/` 加入專案的 `.gitignore` 並提交該變更，因此檢出的工作樹絕不會被提交回專案。

## 在工作樹中作業

工作樹對話會在側邊欄的項目旁顯示分支圖示。代理（以及對話所做的一切）都會針對工作樹的分支與檔案執行，與您的主要檢出隔離。

由於工作樹的設計是透過**合併到主分支**整合回去，對話標頭動作選單中的發佈動作受到限制：

| 動作     | 在工作樹對話中 |
| ------ | ------- |
| **拉取** | 可用      |
| **推送** | 隱藏      |
| **部署** | 隱藏      |

推送與部署是預設分支的操作，請先將成果合併回去，再從主對話發佈。

## 合併到主分支

開啟對話標頭中的**工作樹**下拉選單，選擇**合併到主分支**。CTOR 會：

1. 將工作樹待處理的變更提交為一個快照提交。
2. 將工作樹的分支合併到您主要檢出中的預設分支。

主要檢出必須位於預設分支，且沒有未提交的變更。否則合併會停止，並告知您需要先修正什麼（例如，提交或暫存主要檢出的變更）。

若合併遇到衝突，會自動中止，對話框會列出衝突的檔案。請手動解決後，再次執行**合併到主分支**。

## 移除工作樹

開啟**工作樹**下拉選單，選擇**移除工作樹**。這會刪除工作樹的目錄，但保留其 git 分支。

若工作樹有未提交的變更，第一次嘗試會被擋下並顯示警告。再次以**捨棄變更並移除**確認，即可強制移除並失去那些變更。

## 孤立的工作樹

若工作樹的目錄被移除（來自其他視窗，或在 CTOR 之外），對話會偵測到其檢出已不存在並轉為唯讀，顯示橫幅「此工作樹已不存在於磁碟，對話為唯讀。」對話內容仍可閱讀；切換到其他對話即可繼續作業。
