iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Modern Web

Git 起來!每日一招學起來系列 第 28

Day 28:git worktree —— 多分支同時開發神器

  • 分享至 

  • xImage
  •  

在日常開發中,你是不是也曾遇過這種窘境:

  • 手上正在 main 分支忙著開新功能,結果突然要修 bug。
  • 想切去 hotfix 分支,但手邊的修改還沒完成。
  • 只好先 git stash、切分支、修 bug、再回來 stash pop… 一整個心累 😩
  • 或者乾脆多 clone 一份 repo,桌面亂成一團。

其實 Git 早就幫你想好解方了,那就是 —— git worktree:在同一個 repo 中,開出多個「工作目錄」平行開發!


git worktree 是什麼?

Worktree(工作樹)讓你在同一個 Git 倉庫中建立多個獨立的工作目錄。

每個目錄都可以:

  • 檢出不同分支
  • 保有獨立的修改、暫存與提交
  • 共享相同的 .git 版本資料

可以想成是 Git 的「分身術」 —— 讓你同時存在於多個平行世界,開不同分支卻互不干擾。


建立新的 Worktree

最基本用法:

git worktree add <路徑> <分支名稱>

git worktree add ../feature-login feature/login

說明:

  • ../feature-login:新建工作目錄的路徑
  • feature/login:要 checkout 的分支(不存在會自動建立)

建立後你會得到這樣的結構:

/project         ← main 分支
/feature-login   ← feature/login 分支

此時可以同時在兩個目錄開發,不會互相干擾


切換現有分支

如果你想把 已有分支 檢出到另一個目錄:

git worktree add ../hotfix hotfix/typo

這樣你就能在 ../hotfix 下開發 hotfix,而不必動 main!


查看所有 Worktree

git worktree list

範例輸出:

/home/user/project         123abc [main]
/home/user/feature-login   456def [feature/login]
/home/user/hotfix          789ghi [hotfix/typo]

每個工作目錄都會顯示:

  • 路徑
  • commit hash
  • 對應分支

一目了然 👍


移除 Worktree

使用完可以安全移除:

git worktree remove ../feature-login

不會影響原始 repo,但請確保該目錄乾淨(沒有未提交變更)

若出現「dead worktree」殘留,可以清理:

git worktree prune

實戰案例:Hotfix 緊急修正不打斷主線

假設你在 main 分支開發,突然發現 typo 需要立刻修正:

# 建立一個 hotfix 分支的 worktree
git worktree add ../hotfix hotfix/typo

# 進入 hotfix 工作樹
cd ../hotfix

# 修正 bug 並提交
git add typo.js
git commit -m "修正拼字錯誤"
git push origin hotfix/typo

這樣就能:

  • 不切換 main 分支
  • 不用 stash
  • 不會干擾正在開發的功能

指令速查表

指令 意思 用途說明
git worktree add <path> <branch> 建立新 worktree 同時開多分支、避免切換衝突
git worktree list 列出所有 worktree 查看目前有哪些工作目錄
git worktree remove <path> 移除 worktree 清理不再使用的目錄
git worktree prune 清理 dead worktree 移除已不存在的工作樹紀錄

進階:--detach 模式

如果你想「只看舊版本、不綁分支」——可以用 --detach

git worktree add --detach ../temp

這會建立一個 detached HEAD 的目錄(不屬於任何分支)。

功能比較 git worktree add ../feature feature git worktree add --detach ../temp
HEAD 狀態 Attached(綁在分支上) Detached(不屬於任何分支)
是否建立分支
是否追蹤遠端 不會
適合用途 正式開發 臨時測試、查看舊版本
可隨時刪除 建議保留 可直接刪除

💡 一句話記住:

  • -detach = 純測試、不綁分支、安全實驗用。

Worktree 的特性

  • 多分支同時存在

    每個 worktree 各自 checkout 不同分支,彼此獨立。

  • 共用 .git,節省空間

    不用多 clone,磁碟負擔更小。

  • 自動管理引用

    新增或移除 worktree 會同步更新 .git/worktrees/

  • 安全限制

    同一分支不能被多個 worktree 同時 checkout,避免衝突。


小挑戰 💪

試著在同一個 repo 中:

  1. 建立兩個 worktree:feature/loginhotfix/typo
  2. 在 feature/login 提交一個 commit
  3. 在 hotfix/typo 修正一個小 bug 並 push
  4. 回到 main 確認完全不受影響

成功完成,就代表你掌握了 Worktree 的真功夫!


小結

它的優點:

  • 不必頻繁切換分支
  • 不再依賴 git stash
  • 節省空間、提高手速
  • 適合多任務、平行開發、快速修 bug

有了 git worktree,你再也不用為「切分支忘 stash」的夢魘驚醒啦 😎


上一篇
Day 27:git reflog —— Git 黑盒子救回消失的紀錄
下一篇
Day 29:Branch & Remote 進階 —— 地端與雲端的雙向連線術
系列文
Git 起來!每日一招學起來30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言