跳至主要內容
技術

Git Worktree 入門 — 不用 stash 的多分支並行開發

Git Worktree 入門 — 不用 stash 的多分支並行開發
Git 工作流進化 第 1 / 1 篇

本篇是「Git 工作流進化」系列的第 1 / 1 篇。你可以從系列總覽開始閱讀,也可以直接接著看本文。

背景

你有沒有遇過這種情況:正在改一個 feature 改到一半,PM 突然說線上有 bug 要修。

傳統做法通常是:

  1. git stash 暫存手上的改動
  2. git checkout hotfix-branch
  3. 修完 bug,commit,push
  4. git checkout feature-branch
  5. git stash pop 把改動拿回來
  6. 然後發現 stash 衝突了…

或者更暴力一點:直接 commit 一個 WIP: 先存一下 的 commit,之後再 squash。這兩種做法都不理想 — stash 容易忘、WIP commit 污染歷史。

什麼是 Git Worktree

Git worktree 讓你把同一個 repo 的不同分支,同時 checkout 到不同的目錄。

# 你的主要工作目錄
~/projects/my-app/          ← main branch

# 建立一個 worktree 來修 hotfix
git worktree add ../my-app-hotfix hotfix/urgent-fix

# 現在你有兩個目錄,各自獨立
~/projects/my-app/          ← 繼續改 feature(不用 stash)
~/projects/my-app-hotfix/   ← 修 hotfix

重點:兩個目錄共享同一個 .git。commit history、remote、config 都是同一份。但工作目錄是獨立的,不會互相干擾。

基本操作

建立 worktree

# 從既有分支建立
git worktree add ../my-app-hotfix hotfix/urgent-fix

# 建立新分支 + worktree(一步到位)
git worktree add -b feature/new-thing ../my-app-new-feature

列出所有 worktree

git worktree list
# /Users/bobo/projects/my-app              abc1234 [main]
# /Users/bobo/projects/my-app-hotfix       def5678 [hotfix/urgent-fix]

刪除 worktree

# 先刪目錄,再清理
rm -rf ../my-app-hotfix
git worktree prune

# 或一步搞定
git worktree remove ../my-app-hotfix

什麼時候該用 Worktree

情境傳統做法Worktree 做法
Feature 改到一半要修 hotfixstash → checkout → pop開新 worktree,直接修
同時跑兩個分支的測試切來切去兩個目錄各跑各的
Code review 時想看完整的分支checkout 過去看開 worktree,用編輯器直接開
比較兩個分支的行為差異切來切去或用 diff兩個目錄並排開

注意事項

  1. 同一個分支不能同時 checkout 到兩個 worktree — Git 會阻止你
  2. node_modules 不共享 — 每個 worktree 要各自 npm install(但這也是優點,環境完全獨立)
  3. 命名慣例 — 建議 worktree 目錄放在主 repo 旁邊,用 {repo}-{用途} 命名

反思

技術面

Worktree 從 Git 2.5(2015 年)就有了,但很多人不知道。原因很簡單:大多數 Git 教學不會教它,因為它不是「基礎操作」。但一旦你的工作流需要頻繁切換分支,它的價值就顯現出來了。

心態面

stash 用久了會覺得「就是這樣嘛」,但其實每次 stash 都有認知負擔 — 我 stash 了什麼?有幾個 stash?pop 會不會衝突?Worktree 的做法是從根本上消除這個問題:不需要暫存,因為你根本不需要離開。

有趣發現

很多 AI coding 工具(像 Claude Code)也開始支援 worktree 模式,讓 AI 在獨立的 worktree 裡工作,不影響你手上正在改的程式碼。這個概念和人類開發者用 worktree 的理由完全一樣 — 隔離。

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →