前言 / 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 → 避免佔用磁碟空間
最佳實踐總結
應該做的
為不同用途創建專門的 Worktree
../myapp-main- 主分支../myapp-dev- 開發分支../myapp-test- 測試分支
定期清理不需要的 Worktree
- 功能完成後立即刪除
- 避免磁碟空間浪費
使用描述性的目錄名稱
../myapp-ai-refactor而不是../myapp-1
不應該做的
手動刪除
.git目錄- 所有 Worktree 共享同一個
.git - 手動刪除會破壞整個 repository
- 所有 Worktree 共享同一個
在 Worktree 中創建新的 Worktree
- 可能造成路徑混亂
- 建議在主目錄中創建
忽略 Worktree 的清理
- 會佔用大量磁碟空間
- 容易造成版本管理混亂
總結
Git Worktree 是一個強大的工具,特別適合:
- 多分支同時開發:不需要頻繁切換分支
- AI 輔助開發:可以同時測試多個 AI 生成的解決方案
- 功能實驗:安全地嘗試新的程式碼架構
- 緊急修復:快速處理生產環境問題
關鍵優勢
- 提高開發效率:減少分支切換時間
- 降低錯誤風險:每個功能有獨立的工作環境
- 更好的專案管理:清晰的目錄結構
- 支援團隊協作:每個開發者可以有自己的工作環境
記住:最好的工具是那些能讓你專注於程式碼本身,而不是工具管理的工具。git worktree 正是這樣的工具。