Featured image of post 為什麼切換分支一定要 git stash?Git Worktree 是什麼?Git Worktree 與 Git Branch 有什麼差別?如何用 Git Worktree 打造高效多線程開發流程?告別頻繁切換與衝突!

為什麼切換分支一定要 git stash?Git Worktree 是什麼?Git Worktree 與 Git Branch 有什麼差別?如何用 Git Worktree 打造高效多線程開發流程?告別頻繁切換與衝突!

正在開發新功能卻遇到緊急 Bug?別再用 git stash 藏程式碼了!介紹 Git Worktree 的核心概念、與 Git Branch 的差異、實戰目錄規劃及 AI Agent 協作的最佳實踐。

你有沒有遇過這種情況?正在開發一個複雜的新功能,程式碼寫到一半,突然接到緊急 Bug 需要立刻修復。

為了切換分支,你只好心不甘情不願地執行 git stash 藏起半成品的程式碼。修完 Bug 切回來後,還要小心翼翼地 git stash pop,甚至有時候還會遇到程式碼衝突的惡夢。

其實 Git 早就有一個超強的工具能解決這個痛點,那就是 Git Worktree

告別混亂的切換與 Stash,用 Worktree 開啟多線程開發

這篇文章帶你一次搞懂它的核心運作與實戰用法。

Git Worktree 與 Git Branch 有什麼不同?

要搞懂 Git Worktree,我們先釐清它和 Git Branch 的差別。

我們可以把版本控制想像成在讀一本書:

  • Commit書本的版本
  • Branch夾在某頁的書籤
  • Worktree 則是 讓你攤開書本的工作桌

傳統做法中,我們只有一張工作桌。每當要切換書籤時,就必須把桌面上正在修改的紙張全部收起來或藏進抽屜(也就是 git stash)。

Git Worktree 則允許你同時擁有好幾張 獨立的工作桌

比較項目 Git Branch Git Worktree
工作區概念 共用單一實體工作目錄 擁有多個獨立的實體工作目錄
切換分支代價 需提交、Stash 或暫存變更 無須 Stash,直接切換目錄即可
隔離安全性 未提交檔案可能產生衝突或殘留 目錄完全隔離,變更互不干擾
歷史紀錄 共用 Git Commit 歷史與分支 共用 Git Commit 歷史與分支

不同 Worktree 的目前分支、暫存區與未提交修改完全獨立,但它們彼此會 共用所有的 Commit 歷史與分支紀錄

Branch 是版本書籤,Worktree 是實體工作桌

這樣一來,你需要切換任務時,只要開啟另一個資料夾目錄即可,完全不需要變動當前的開發狀態。

如何開始使用 Git Worktree?

在實際專案中導入 Git Worktree 時,良好的目錄規劃能讓開發更順暢。

建議把原本 git clone 下來的專案目錄當作乾淨的 main 總部,並將新建的 Worktree 目錄放在專案外層(例如 ../my-app-worktrees),避免開發工具遞迴掃描資料夾時出錯。

常用的指令流程如下:

流程 指令
1. 建立新 Worktree 並同時建立新分支 git worktree add ../my-app-worktrees/feature-login -b feature-login
2. 查看目前所有的 Worktree 清單 git worktree list

Git Worktree 特別適合用來管理 AI Agent 的開發任務。

你可以給 AI Agent 一個獨立的 Worktree 目錄讓它盡情修改與測試,而人類開發者可以在另一個 Worktree 進行程式碼審查(Review)與測試。

給 AI Agent 獨立的 Worktree,讓 AI 開發與人類審查可以平行處理

兩者在各自的實體目錄中運作,既安全又清晰。

開發完成後如何合併與安全清理?

當你在獨立的 Worktree 完成開發後,接下來該如何將成果合併並進行清理?

請記住一個重要觀念:Worktree 目錄本身不需要合併,真正要合併的是 Branch 分支

你只需要回到 main 的工作桌目錄,直接執行 git merge 對應的功能分支即可完成整合。

清理時請依照標準的二步驟流程:

步驟 指令
1. 移除 Worktree 實體目錄 git worktree remove ../my-app-worktrees/feature-login
2. 刪除已完成的功能分支 git branch -d feature-login

先移除 Worktree 目錄,再刪除 Branch 分支

請務必使用 git worktree remove 指令來清理,而不是直接在檔案總管中手動刪除資料夾。

使用 Git Worktree 有哪些常見陷阱?

雖然 Git Worktree 非常方便,但在使用時有幾個地雷需要特別注意。

陷阱 1: 未提交的修改會遺失

雖然刪除 Worktree 不會刪除 Branch 分支,但如果你在該目錄還有沒 commit 的變更,強制刪除 Worktree 目錄就會導致那些未提交的修改付之一炬。

陷阱 2: 分支佔用衝突

Git 的保護機制 不允許同一個 Branch 分支同時在兩個不同的 Worktree 中 Checkout。如果你試圖在第二個 Worktree 切換到已經被佔用的分支,Git 會直接阻擋並拋出錯誤訊息。

強制刪除 Worktree 會失去尚未 Commit 的變更

只要掌握好這些特性與原則,就能避免踩坑。

結論

透過 Git Worktree,我們可以徹底告別混亂的分支切換與 git stash 流程,實現真正的多線程開發。

下次不管是遇到緊急 Bug 需要修復、同時推進多個功能,還是指派任務給 AI Agent 協助寫程式,不妨試著開一張新的工作桌吧!

Reference

All rights reserved,未經允許不得隨意轉載
使用 Hugo 建立
主題 StackJimmy 設計