
前言:你是否也遇過這種窘境?
想像一下:你正在 feature-A 分支上寫得正順,突然老闆衝過來,說線上環境有個緊急 Bug 需要在 main 分支修復。
git stash 把寫到一半的內容存起來,切換分支後修完再切回來。如果改動範圍很大,這過程不僅繁瑣,還容易搞混。這時候,Git Worktree 就是你的救星!
什麼是 Git Worktree?
簡單來說,git worktree 允許你在同一個專案(同一個 .git 資料夾)下,同時擁有多個工作目錄(Working Tree)。
每個工作目錄都可以指向不同的分支。你可以在資料夾 A 開發新功能,同時在資料夾 B 修復緊急 Bug,兩邊互不干擾,卻共享同一個本地倉庫的歷史紀錄與物件。
核心優勢
- 無需 Stash:不必打斷手邊的工作。
- 節省空間:不需要像
git clone那樣重複下載整個歷史紀錄。 - 高效並行:可以在一個目錄跑大型測試或編譯,在另一個目錄繼續寫程式。
常用指令詳解
1. 建立新的工作樹
這是最常用的指令。它會建立一個新資料夾,並自動切換到指定的分支。
指令:
git worktree add <路徑> <分支名稱>
- 範例:
git worktree add ../hotfix-dir emergency-fix - 這會在上一層目錄建立
hotfix-dir資料夾,並切換到emergency-fix分支。
2. 查看目前所有的工作樹
如果你忘了自己開了多少個工作樹:
指令:
git worktree list
3. 移除工作樹
當任務完成後,清理掉不再需要的工作樹:
指令:
git worktree remove <路徑>
實戰應用情境
- 程式碼審查 (Code Review):在不影響自己開發進度的情況下,開一個新目錄檢查同事的 Branch。
- 版本環境對比:同時開啟
v1.0和v2.0的代碼,直接用編輯器進行物理上的比對,不用切來切去。 - 長耗時任務:一邊在 A 目錄跑長達 10 分鐘的整合測試,一邊在 B 目錄繼續修下一個 Bug。
常見錯誤排除:為什麼我的指令失敗了?
在初次使用時,很多人會遇到 usage: git worktree add ... 的錯誤訊息,通常是因為以下兩個原因:
- 路徑衝突:不能使用
.(當前目錄)。因為目前目錄已經是主工作樹了,Git 不允許在同一個位置重疊建立另一個工作樹。 - 參數過多:指令語法必須嚴格遵守
<路徑> <分支>。如果多輸入了不必要的參數或打錯字,Git 就會報錯。
進階:如何優雅地管理 Worktree?
如果你習慣將所有的 Worktree 集中管理在專案內的 .worktrees/ 資料夾下,這是一個非常整潔的做法,但請務必做好以下設定:
1. 正確的指令範例
假設要針對 emergency-fix 分支開一個工作樹:
- 若分支已存在:
git worktree add .worktrees/emergency-fix emergency-fix - 若要同時建立新分支:
git worktree add .worktrees/emergency-fix -b emergency-fix
2. 關鍵的 .gitignore 設定
因為 .worktrees/ 位在專案資料夾內,為了避免主專案的 Git 狀態變得混亂,請務必在你的 .gitignore 檔案中加入:
.worktrees/這樣主專案就會忽略這些暫時性的工作目錄,保持開發環境乾淨。
3. VS Code 使用小撇步
在子工作樹資料夾中,Git 會自動產生一個 .git 檔案連結回主目錄。你可以同時將主專案與子工作樹加入 VS Code 的 Workspace (工作區),這樣就能在同一個側邊欄看到不同分支的代碼,進行極速開發與比對!
結語: Git Worktree 是一個被低估的神級工具。一旦習慣了「物理隔離」的開發模式,你就再也回不去頻繁 stash 的日子了。希望這篇文章能幫你優化開發流程!

















