沒問題!我將這幾次討論的精華整合成一份完整的 Blog 文章。這份內容保留了幽默感,並強化了你補充的「空間節省」與「狀態同步」兩大關鍵痛點。
影分身之術!用 Git Worktree 拯救你亂成一團的開發進度
你是否遇過這種崩潰情境:正當你在 feature 分支寫 Code 寫得行雲流水、靈感爆棚時,老闆突然衝進來大喊:「客戶說線上版噴火了,快給我去修 master 的 Bug!」
這時候你只能心碎地執行 git stash,把剛寫到一半、像極了草稿的程式碼強行塞進垃圾袋(暫存區),然後祈禱修完 Bug 回來時還記得剛才在寫什麼。
別再折磨自己了!今天來介紹 Git 界的「影分身之術」—— Git Worktree。
1. 什麼是 Git Worktree?
git worktree 是 Git 2.5 版本後新增的指令。它的核心定義是:「在同一個專案之中,能夠同時開啟多個不同的工作目錄(Working Tree)」。
傳統做法(單軌鐵路):你要切換分支,必須先把軌道上的火車(目前的進度)清空(Stash 或 Commit),下一班火車才能進來。
Worktree(多軌鐵路):直接在旁邊加蓋一條新軌道。原本的開發視窗不動,直接在另一個資料夾開新分支修 Bug。兩邊互不干擾,簡直是多工處理的救星!
2. 為何你該捨棄 git clone 或 git stash?
很多工程師為了多開視窗,會選擇 git clone 第二份專案到另一個資料夾。雖然這也能達到效果,但比起 Worktree,這簡直是「傷財又勞力」。
■ 理由一:硬碟空間的極致節省
當你 git clone 一個專案時,背後的 .git 資料夾包含了專案從出生到現在的所有歷史紀錄。如果你的專案很大(例如幾 GB),Clone 兩次就是雙倍的硬碟佔用。
Git Clone x 2:硬碟空間 1+1=2。
Git Worktree:所有的分身都共用同一個 .git 儲存庫。分身資料夾裡只有當前分支的檔案,硬碟空間維持在 1+0.0001 的極簡狀態。
■ 理由二:拒絕「同步地獄」
如果你用 Clone 兩份的方式,你在 A 資料夾 git pull 更新了分支,B 資料夾的進度還是舊的,你得手動再 pull 一次。
Git Worktree:因為共用儲存庫,你在任何一個分身中做的
Commit、Push或Pull,都會全域連動。你在 A 處拉取的最新進度,B 處立刻就能看到,完全不需要在兩個資料夾之間推來推去。
3. 5W1H 核心大拆解
4. 指令實戰:如何發動影分身?
情境 A:基於 master 開一個新的 Hotfix 分支
假設你正在 develop 忙,現在要修一個緊急 Bug:
# 指令格式:git worktree add <路徑> -b <新分支名> <起點分支>
git worktree add ../MyRepo-hotfix -b hotfix/v2.0-bug master
這會在上一層目錄生出一個 MyRepo-hotfix 資料夾,進去直接修 Bug,原本的 develop 視窗完全不用動!
情境 B:開啟一個現有的分支進行對照
想在旁邊開一個資料夾跑跑看 master 分支的程式碼:
# 指令格式:git worktree add <路徑> <既有分支名>
git worktree add ../MyRepo-master master
注意:Git 不准同一個分支同時在兩個工作目錄被 Checkout。如果你原本的目錄已經停在
master,你得先把它切到別的分支,分身才能開啟master。
5. 完工後的清理步驟(重要!)
Worktree 用完後,直接刪除資料夾是不夠的,因為 Git 的紀錄中仍會認為該分支被佔用。
優雅刪除:推薦使用標準指令,這會自動處理連結關係:
Bashgit worktree remove <資料夾路徑>暴力清理:如果你已經手動按 Delete 刪了資料夾,Git 列表還是會有殘留。此時務必執行以下指令來釋放分支鎖定:
Bashgit worktree prune
總結比較表:誰才是最佳解?
結語:
git worktree 讓你把精力花在寫 Code,而不是花在同步資料夾或處理暫存區。如果你還在為了多開專案而苦哈哈地反覆 Clone,快試試這招 Git 隱藏神技吧!



沒有留言:
張貼留言