前言 / Introduction

為什麼需要 git worktree?

在現代軟體開發中,我們經常面臨這樣的困境:

  • 多個功能同時開發:主線功能、實驗性功能、緊急修復
  • AI 輔助開發:AI 生成的程式碼需要測試,但不想污染主分支
  • 分支切換困擾:頻繁的 git checkout 容易忘記當前狀態
  • Stash 堆積:臨時程式碼越來越多,難以管理

Git Worktree 就是為了解決這些問題而生。它允許你在同一個 repository 中創建多個工作目錄,每個目錄對應不同的分支,讓你可以同時進行多個開發任務。


git worktree 核心概念

什麼是 Worktree?

git worktree 是 Git 2.5+ 引入的功能,它允許你:

  • 在同一個 repository 中創建多個工作目錄
  • 每個工作目錄可以切換到不同的分支
  • 所有工作目錄共享同一個 .git 目錄
  • 可以同時編輯、測試、提交不同分支的程式碼

與其他 Git 功能的比較

功能用途優點缺點
Commit永久記錄程式碼版本追蹤完整不適合半成品
Stash臨時暫存變更快速切換分支容易堆積、遺忘
Branch功能分支開發版本控制完整需要頻繁切換
Worktree平行工作目錄同時開發多分支需要更多磁碟空間

實戰教學:從零開始使用 Worktree

1. 基本操作

創建新的 Worktree

# 基本語法
git worktree add <path> <branch-name>

# 實際範例:創建一個新的 Worktree 來開發 AI 功能
git worktree add ../myapp-ai-feature ai-feature

# 如果分支不存在,使用 -b 參數創建
git worktree add -b experimental-feature ../myapp-experimental experimental-feature

查看所有 Worktree

# 列出所有 Worktree
git worktree list

# 輸出範例:
# /home/user/myapp                    main     [main]
# /home/user/myapp-ai-feature         ai-feature [ai-feature]
# /home/user/myapp-experimental       experimental-feature [experimental-feature]

刪除 Worktree

# 刪除 Worktree(會同時刪除對應的分支)
git worktree remove ../myapp-ai-feature

# 強制刪除(即使有未提交的變更)
git worktree remove --force ../myapp-ai-feature

# 只刪除 Worktree,保留分支
git worktree remove --keep-branch ../myapp-ai-feature

2. 進階用法

創建臨時 Worktree

# 創建臨時 Worktree,用完自動清理
git worktree add --detach ../temp-Worktree HEAD

# 或者指定特定 commit
git worktree add --detach ../temp-Worktree abc1234

移動 Worktree

# 移動 Worktree 到新位置
git worktree move ../myapp-ai-feature /new/path/ai-feature

# 移動後記得更新 IDE 的專案路徑

AI 開發場景的最佳實踐

場景一:AI 程式碼實驗

當 AI 生成多個解決方案時,使用 Worktree 可以同時測試:

# 主專案
cd myapp

# 創建 AI 方案 A 的 Worktree
git worktree add ../myapp-ai-solution-a ai-solution-a

# 創建 AI 方案 B 的 Worktree  
git worktree add ../myapp-ai-solution-b ai-solution-b

# 創建 AI 方案 C 的 Worktree
git worktree add ../myapp-ai-solution-c ai-solution-c

現在你可以:

  • 在三個不同的 IDE 視窗中同時測試
  • 比較不同 AI 方案的效能
  • 選擇最佳方案合併回主分支

場景二:功能重構

# 主分支:保持穩定
cd myapp

# 重構分支:大規模重構
git worktree add ../myapp-refactor refactor

# 新功能分支:添加新功能
git worktree add ../myapp-new-feature new-feature

場景三:緊急修復

# 主分支:繼續開發
cd myapp

# 緊急修復分支:處理生產環境問題
git worktree add ../myapp-hotfix hotfix

# 修復完成後合併回主分支
cd ../myapp-hotfix
git checkout main
git merge hotfix
git worktree remove ../myapp-hotfix

常見坑與注意事項

  • Worktree 共用 .git → 千萬不要手動刪 .git
  • 刪除請用指令 → git worktree remove,不要 rm -rf
  • 不要在 Worktree 裡再建 Worktree → 路徑容易混亂
  • 記得清理不再使用的 Worktree → 避免佔用磁碟空間

最佳實踐總結

應該做的

  1. 為不同用途創建專門的 Worktree

    • ../myapp-main - 主分支
    • ../myapp-dev - 開發分支
    • ../myapp-test - 測試分支
  2. 定期清理不需要的 Worktree

    • 功能完成後立即刪除
    • 避免磁碟空間浪費
  3. 使用描述性的目錄名稱

    • ../myapp-ai-refactor 而不是 ../myapp-1

不應該做的

  1. 手動刪除 .git 目錄

    • 所有 Worktree 共享同一個 .git
    • 手動刪除會破壞整個 repository
  2. 在 Worktree 中創建新的 Worktree

    • 可能造成路徑混亂
    • 建議在主目錄中創建
  3. 忽略 Worktree 的清理

    • 會佔用大量磁碟空間
    • 容易造成版本管理混亂

總結

Git Worktree 是一個強大的工具,特別適合:

  • 多分支同時開發:不需要頻繁切換分支
  • AI 輔助開發:可以同時測試多個 AI 生成的解決方案
  • 功能實驗:安全地嘗試新的程式碼架構
  • 緊急修復:快速處理生產環境問題

關鍵優勢

  1. 提高開發效率:減少分支切換時間
  2. 降低錯誤風險:每個功能有獨立的工作環境
  3. 更好的專案管理:清晰的目錄結構
  4. 支援團隊協作:每個開發者可以有自己的工作環境

記住:最好的工具是那些能讓你專注於程式碼本身,而不是工具管理的工具。git worktree 正是這樣的工具。