您正和 Claude Code 一起製作語系參考頁:清單搜尋功能正在開發,做到一半。這時您發現,已保存的頁面版本中,標題下方的說明文字不正確。修正只要兩分鐘,但您想把它和未完成的搜尋分開檢查,而不是混在一起。
接下來看看如何在同一個 repository 中,為第二項任務準備專屬工作資料夾、在其中開啟獨立的 Claude Code 工作階段,最後再保存成果而不弄混任何內容。多一個資料夾本身不會讓工作變快。它只有一個用途:避免兩項任務的檔案混在一起。
什麼時候需要第二個工作資料夾
教學用專案 locale-guide 是一個列出各語系的瀏覽器頁面。目前資料夾中正在處理任務 A:搜尋功能,分支是 feature/search,還有一項未完成的修改:
git status --short
M app.js這項修改不能丟,但現在還不能算完成。接著出現了與搜尋無關的任務 B:修正 index.html 中的說明文字,而且要以保存於 main 的版本為準。
您可能首先想到的是再開一個終端機,在同一個資料夾中啟動另一個 claude。兩邊的對話雖然不同,檔案卻是共用的。如果兩個執行者修改到相同區域,變更就可能混在一起。在這個簡單例子中,說明文字和搜尋暫時位於不同檔案,但兩個工作階段都會看到同一個未完成的專案。切換分支也得先處理目前的變更。
解法是替任務 B 準備獨立的工作空間。Git 提供同一個 repository 的另一個工作資料夾,也就是 worktree;Claude Code 則有 --worktree 旗標,可建立這個資料夾並直接在其中啟動工作階段。我們先看運作方式,再看這個旗標。

先說清楚:不是每項任務都得用這種方式。如果工作目錄乾淨,而且修改很小,多一個資料夾只會增加麻煩。在同一個資料夾中輪流處理任務,也完全沒問題。
分支、工作資料夾與工作階段
這三件事常常同時出現,很容易混淆:
| 項目 | 保存內容 | 所在位置 |
|---|---|---|
| 分支 | 指向 commit 與歷史線的指標 | 位於 repository 中,所有工作資料夾共用 |
| 工作資料夾 (worktree) | 您目前正在處理的檔案,以及已準備好要 commit 的內容 | 位於磁碟上,每個資料夾各自獨立 |
| 工作階段 | 與代理的對話及其上下文 | 位於 Claude Code 中 |
所以,關於第二個終端機的答案是:新的工作階段會分開對話,但不會分開檔案。要讓檔案也各自獨立,就需要第二個工作資料夾。
兩個資料夾共用歷史和分支,因為它們連結到同一個 repository。Git 設定預設也共用,不過 Git 支援為 worktree 設定個別選項。工作檔案和已準備好要 commit 的變更則各自獨立。第一個資料夾中尚未 commit 的搜尋修改,不會自動出現在第二個資料夾。
通常無法在兩個資料夾中同時開啟同一個分支。Git 會拒絕操作,並指出目前使用該分支的資料夾:
fatal: 'fix/label' is already used by worktree at '/projects/locale-guide-label'選擇起始狀態
教學範例中的 repository 已建立,至少有一個 commit,也有本機分支 main 和 feature/search。目前兩個分支都指向同一個 commit,而搜尋功能只有尚未 commit 的修改。先在主要資料夾中用三個指令查看目前狀態:
git status --short # 目前有哪些變更尚未保存
git branch --show-current # 主要資料夾目前位於哪個分支
git log -1 --oneline main # main 中的最新 commit M app.js
feature/search
d5ec405 add locale guide page要獨立修正說明文字,我們選擇 main:任務 B 需要的是已保存的頁面版本,而不是搜尋功能目前的狀態。請留意,這是您電腦上的本機 main。它不一定與遠端同名分支一致,而且這個指令不會從遠端抓取任何內容。
如果第二項任務需要第一項任務的成果,先決定要以哪個已保存的 commit 為基礎,再從該 commit 建立資料夾。一般的 git worktree add 不會自動帶入尚未 commit 的修改。個別複製檔案或使用其他工具準備環境,都是另外的操作。
建立第二個工作資料夾
在 locale-guide 資料夾中執行:
git worktree add -b fix/label ../locale-guide-label main從左到右讀:建立新分支 fix/label,在旁邊的 ../locale-guide-label 路徑建立工作資料夾,並以 main 作為起點。最後一個引數明確指定了基礎分支。若省略它,這個指令會採用 feature/search 分支目前的 commit HEAD,但不會包含尚未 commit 的變更。本例中的兩個分支仍在同一個 commit 上,所以檔案會完全相同;搜尋功能有了新 commit 之後,基礎分支的選擇就會影響結果。Git 大致會回覆:
Preparing worktree (new branch 'fix/label')
HEAD is now at d5ec405 add locale guide page接著確認建立結果。-C 旗標會讓 Git 在指定資料夾中執行指令,而不必先切換到該資料夾:
git worktree list
git -C ../locale-guide-label branch --show-current
git -C ../locale-guide-label status --short教學用輸出中的路徑是假設值,您看到的會是自己的路徑:
/projects/locale-guide d5ec405 [feature/search]
/projects/locale-guide-label d5ec405 [fix/label]
fix/label清單列出兩個資料夾及各自的分支。主要資料夾仍在 feature/search,保留未完成的搜尋;新資料夾則位於 fix/label。第二個資料夾中的 status 沒有輸出任何內容,表示它是乾淨的,正是我們想要的狀態。
如果路徑或分支名稱無法使用,Git 會拒絕操作並說明原因,例如 already exists 或 is already used by worktree。請檢查 worktree 清單、分支和指定資料夾的內容。那可能是您先前啟動的 worktree,也可能屬於另一項任務。不要隨手加上 --force:先確認已存在的內容是什麼,以及是否還有用途。
在 Claude Code 中開啟第二項任務
您可以在 IDE 的另一個視窗開啟 locale-guide-label,或是在新的終端機切換到該資料夾,再從那裡啟動 claude。新的工作階段不知道任務 A 的內容,這很正常,它只需要自己的上下文:
預期資料夾:locale-guide-label,分支:fix/label。
先確認實際的資料夾和分支。如果不同,請停止。
讀取 index.html。
將標題下方的說明文字改為 "語系清單:代碼、語言與國家"。
不要修改檔案中的其他內容,並向我展示這項變更。在 Claude Code 修改檔案前,請它說明目前的工作資料夾和分支,並確認是否符合您的預期。代理即使在錯誤的資料夾中執行,看起來也一樣有把握。
修改後,請分別在兩個終端機中檢查 git status 和 git diff:第二個資料夾中只有 index.html 的說明文字變更,第一個資料夾則保留原本對 app.js 的修改。單看 status 只能看到檔名,無法確認檔案內容是否完整。若要精確比對,檢查期間請先暫停搜尋任務。請從主要資料夾自己的終端機檢查,不要叫隔離工作階段中的代理切換過去。也要從第二個資料夾開啟頁面,否則看到的仍會是舊的說明文字。
還有更簡便的做法。claude --worktree label-fix 指令會自行建立工作資料夾,並在其中啟動工作階段。根據目前的文件,資料夾會建立在 repository 內的 .claude/worktrees/label-fix/,分支名稱為 worktree-label-fix,而基礎會採用遠端 repository 的預設分支(通常是 main),不是您目前的 commit。如果尚未設定遠端 repository,則會以目前的本機 commit 為基礎。這和上面明確指定 main 的指令並不相同,不過在簡單專案中,結果常常一致。預設行為可以透過設定調整,細節請以您使用版本的文件為準。
如果您接受預設基礎,而且想快速替任務安排獨立空間,這個旗標就很方便。若資料夾已建立,就不必再執行一次,否則會多出另一個資料夾。另外建議將 .claude/worktrees/ 加入 .gitignore,否則新資料夾的內容會在主要工作目錄中顯示為未追蹤檔案。
哪些內容仍然共用
獨立資料夾實際上能隔開的內容,比一開始想像的少:
| 各自獨立 | 共用 | 完全不會隔離 |
|---|---|---|
| 工作檔案、已準備好要 commit 的內容、資料夾目前所在的分支 | 歷史、所有分支、repository 設定、遠端 repository 位址 | 本機伺服器連接埠、外部資料庫、雲端服務、程序存取磁碟其他位置的權限 |
最容易忽略的是第三欄。Worktree 隔離的是 Git 檔案,不是整台電腦。兩個本機伺服器無法同時使用同一個連接埠;如果設定指向同一個外部資料庫,兩個資料夾送出的請求也都會到那裡。Claude Code 在個別資料夾中執行的檢查,同樣不會把它變成隔離整個系統的沙箱。
第二個資料夾會取得指定 commit 中的檔案。如果相依項目和本機設定沒有存進 Git,通常需要另外準備環境;也可以用其他工具自動處理。不要未經確認就複製 .env:相同的連線資訊可能會讓兩邊都連到同一個服務。我們的靜態參考頁不需要伺服器或機密資料,直接開啟檔案即可。
保存並移轉成果
在資料夾 B 中透過瀏覽器確認說明文字,查看 git diff,然後只提交需要的檔案:
git add index.html
git diff --cached
git commit -m "fix: correct locale list label"commit 前請確認已準備的只有必要修改。如果 git diff --cached 顯示其他變更,先確認並處理它們。
commit 已進入共用的 repository,從主要資料夾也看得到。但它並未因此進入 main 或 feature/search:它仍在自己的分支中,等您決定是否合併。
只有在任務 A 已完成或至少已保存,而且主要資料夾是乾淨的狀態時,才適合移轉成果。搜尋還沒完成時,不要切換到 main,先處理好手上的工作。主要資料夾乾淨後:
git checkout main
git merge fix/labelFast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)這段輸出代表建立 fix/label 後,main 沒有再變更。如果 Git 顯示衝突,請先停下來,依照合併規則處理。這是另一個主題,可參考文章 "Git 分支與合併"。合併後請重新開啟頁面:說明文字應已更新,語系清單則維持原樣。feature/search 分支不會因此更新;繼續搜尋前,請另行決定是否要把 main 中的修正移轉過去。
移除不再需要的資料夾
先關閉第二個資料夾中的工作階段,以及您在那裡啟動的所有程序。接著確認其中是否還有需要保留的內容:
git -C ../locale-guide-label status --short --ignored修改過的檔案和新檔案會直接列出;--ignored 旗標則會顯示被忽略的檔案,其中常有本機設定和筆記。確認成果已保存到正確的分支後,就可以從主要資料夾移除該資料夾:
git worktree remove ../locale-guide-label
git worktree list如果資料夾中有已追蹤且修改過的檔案,或有未忽略的新檔案,Git 通常會拒絕移除:
fatal: '../locale-guide-label' contains modified or untracked files, use --force to delete it
不要一看到訊息就立刻照做。先檢查檔案並保存需要的內容。資料夾一旦移除,尚未 commit 的資料可能無法透過 Git 還原。也別把 Git 的拒絕當成完整保護:即使沒有 --force,被忽略的檔案也可能一起刪除,所以我們才另外檢查它們。
還有一個容易搞錯的細節:Git 指令會移除工作資料夾,但不會刪除分支。執行後,fix/label 仍會出現在 git branch 清單中。這樣很好,成果還在。等分支真的不再需要,而且該合併的內容都已合併後,再另外刪除分支。
結束以 --worktree 啟動的工作階段時,Claude Code 會檢查資料夾。如果其中沒有變更或新 commit,而且工作階段沒有名稱,它會不經詢問就自行刪除資料夾和分支。如果有工作成果,它會詢問您要保留還是刪除。透過這段對話刪除時,資料夾、Claude Code 建立的分支,以及其中所有內容都會一起移除。這和上面的 Git 指令不同。如果需要保留成果,請選擇 "保留",再自行移轉。
不要繞過 Git,直接用檔案總管刪除資料夾:repository 仍會認為它存在,worktree 清單中也會留下已不存在的項目。
如何在 Claude Code 中處理第二項任務
整個流程可以整理成六個步驟:
- 把第二項任務和第一項分開描述,並決定它要從哪個已保存的狀態開始;
- 明確指定基礎並建立工作資料夾,或在接受預設值時啟動
claude --worktree; - 修改任何內容前,先在新資料夾中確認路徑和分支;
- 只提供這項任務所需的上下文,不要帶入另一項任務的對話紀錄;
- 在修改所在的資料夾中檢查變更,並保存成果;
- 決定是否合併,完成後再移除資料夾。
獨立資料夾不會替您檢查程式碼,也不會代替您驗收工作。它的作用是讓每項任務有自己的工作檔案。本例就能看出好處:說明文字在另一個資料夾中獨立修正並完成檢查,而未完成的搜尋仍留在第一個資料夾。
自我檢查
第二個資料夾中沒有尚未 commit 的搜尋修改。出問題了嗎?
沒有,這正是預期結果。資料夾是從 main 中的 commit 建立,不是根據任務 A 目前的檔案建立。尚未 commit 的修改會留在原本的資料夾。
兩個工作階段開在同一個資料夾中,任務有分開嗎?
對話各自獨立,但檔案共用。如果兩項任務修改到相同區域,變更就可能混在一起。
分支 B 已建立 commit,但 main 中沒有新的說明文字。
這是正常的:commit 仍在自己的分支中,不會修改其他分支。要讓其他分支取得變更,需要進行合併。
第二個本機伺服器無法使用相同的連接埠啟動。
獨立資料夾不會隔離連接埠。請改用另一個連接埠啟動。
Git 拒絕移除工作資料夾。
先看清楚拒絕的原因:除了有未保存的檔案,資料夾也可能正被鎖定,或它本身就是主要工作資料夾。請保存需要的內容並確認目前狀態。不要隨手加上 --force。
如果您想親自練習,可以準備一個有幾個 commit 的教學用 repository:建立兩個資料夾,只修改第二個資料夾中的文字,檢查兩邊,再移除多餘的資料夾。不需要任何服務或帳號。
GO TO FULL VERSION