Use Git Worktree to Reduce Burden of Context Switching

使用 Git Worktree 快速切換複雜的專案情境

前言

近期不管是用 AI Vibe Coding 還是工作上切換不同功能感覺使用 git stash🔗 不是很方便,雖然大致聽說有 git worktree🔗 能解決這個問題但都還懶得學先跳過,這次有空閒乾脆來認真學如何使用 git-worktree 快速切換複雜的專案情境。

現有問題情境

假設在 A 分支你正寫了一些 Code,但突然要到 B 分支修復問題,通常我會 git stash -m '描述寫了某東西' 再 checkout 到 B 分支工作,結束後再 checkout 回來並 git stash apply 恢復 stash 的內容,大多時候這樣的模式沒有問題。

但我發現有時候要「同時開啟不同分支交叉開發」就顯得很麻煩,有時候我甚至會到 GitHub/GitLab 網頁直接翻其他分支檔案(可參考:分享一個我自己在預覽 GitHub 專案時常用的訣竅 —— 點)或者是 clone 多個相同專案到本地預覽。

git worktree

先查看存在的 worktree:git worktree list,理所當然的沒有任何東西。

Terminal window
/home/riceball/Desktop/git-projects/riceball-obsidian 628b009 [main]

添加新的 worktree:git worktree add 檔案位置 目標分支,可以發現上個資料夾新增了 new-post 資料夾且內容是 feat-new-post 分支。

Terminal window
riceball@joe-pc:~/Desktop/git-projects/riceball-obsidian$ git worktree add ../new-post feat-new-post
Preparing worktree (checking out 'feat-new-post')

它們共用相同的 .git 紀錄,所以會比單純 git clone 來得輕量。也可以移動現有 worktree:

Terminal window
git worktree move ../new-post ./foo

最後刪除不要的 worktree:

Terminal window
git worktree remove ./foo

總結

git worktree 可以想像成是 git clone 下特定的分支,但又不用真的將整包歷史紀錄抓下來,相較於 stash 更為靈活但又足夠輕巧。可以搭配 stash 進行乾淨的工作區域切分,減少上下文情境切換的負擔。

延伸閱讀