使用 Git Worktree 提升工作流程:同時管理多個分支
在日常開發中,頻繁在同一工作目錄內 git checkout、git stash 來切換分支,往往會造成上下文遺失,尤其當生產環境緊急錯誤突現時,更容易手忙腳亂。Git 的 worktree(工作樹)功能則提供了一種「一任務、一分支、一目錄」的全新工作模式,讓開發者能在同一儲存庫(repository)下,同時擁有多個獨立的工作目錄,每個目錄各自對應一條分支,卻共享相同的 commit 歷史與物件資料庫(.git 目錄)。
背景與核心概念
- 工作樹:在主專案目錄旁新增子目錄,將指定分支檢出至該目錄。
- 共享 .git 物件庫:所有工作樹共用同一個 .git 目錄,避免重複下載或儲存相同的物件。
- 唯一分支限制:同一分支同時只能被一個工作樹檢出,這促使「一分支一目錄」的乾淨映射,降低誤提交的風險。
實務操作流程
-
建立工作樹
git worktree add ../shop-checkout feature/checkout此指令會在專案根目錄同層產生
shop-checkout目錄,檢出feature/checkout分支。原本的shop目錄仍保留在main分支上。 -
各自開發
-
在
shop-checkout目錄內編輯、git add、git commit、git push,完全不會影響shop目錄的工作狀態。 -
若在開發過程中出現緊急熱修復,只需在
shop(main)目錄快速修正、提交,再回到shop-checkout繼續原功能開發。
-
-
合併分支
合併流程與普通 Git 相同,只是每個分支都有獨立的目錄作為上下文,讓 git merge 時的視覺與檔案衝突更易辨識。
-
檢視與清理
-
查看目前已建立的工作樹:
git worktree list,可直接看出每個目錄對應的分支。 -
完成後移除工作樹(僅刪除目錄,不刪分支):
git worktree remove ../shop-checkout必須在工作樹乾淨(無未提交或未追蹤檔案)時執行,否則需加
--force。
-
未來展望與讀者啟示
Git worktree 為多分支同時開發提供了 「分支即目錄」 的直觀模型,特別適合以下情境:
- 功能開發 vs. 緊急熱修:兩條線路可在不同目錄平行作業,互不干擾。
- 測試環境快速切換:可同時保留多個測試分支的完整工作目錄,省去重複 checkout 的時間。
對於習慣單一工作目錄的開發者而言,導入 worktree 只需幾行指令,即可大幅降低因分支切換造成的認知負荷與錯誤風險。建議在日常開發流程中先嘗試為 每個主要任務 建立一個獨立的工作樹,逐步體驗「同時管理多個分支」的效率提升。
