前言
近期不管是用 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
,理所當然的沒有任何東西。
/home/riceball/Desktop/git-projects/riceball-obsidian 628b009 [main]
添加新的 worktree:git worktree add 檔案位置 目標分支
,可以發現上個資料夾新增了 new-post
資料夾且內容是 feat-new-post
分支。
riceball@joe-pc:~/Desktop/git-projects/riceball-obsidian$ git worktree add ../new-post feat-new-postPreparing worktree (checking out 'feat-new-post')
它們共用相同的 .git
紀錄,所以會比單純 git clone
來得輕量。也可以移動現有 worktree:
git worktree move ../new-post ./foo
最後刪除不要的 worktree:
git worktree remove ./foo
總結
git worktree 可以想像成是 git clone 下特定的分支,但又不用真的將整包歷史紀錄抓下來,相較於 stash 更為靈活但又足夠輕巧。可以搭配 stash 進行乾淨的工作區域切分,減少上下文情境切換的負擔。
延伸閱讀
- 使用 git worktree 管理一個本地儲存庫下的多個工作目錄副本 - The Will Will Web
- Git’s Best And Most Unknown Feature - ThePrimeagen