以往開發時如果有遇到馬上得解決的 issue ,通常都會 stash 現在的所有變更,然後切到主線去解緊急的 issue 。直到看到 git worktree 功能之後,我改變了!
Git worktree 的用法很簡單,很像是複製一個 repo ,然後在裡面像往常一樣操作 git 。
新增一個 git worktree
假設分支 master 有個很緊急的問題必須馬上解決,但你又不想 stash 手上的所有變更與切換分支的話,可以用以下指令在上層建立一個 temp 資料夾,並且讓該資料夾以分支 master 為基礎,分出支 fix-emergency-issue:
$ git worktree add -b fix-emergency-issue ../temp master
然後你就可以移動到 ../temp
去開始修 issue 了!
刪除 git worktree
Git worktree 的刪除很簡單,就是直接刪除分出來的資料夾就可以了。但是 worktree 的資訊還會存在 .git
資料夾中,刪完之後記得執行 git worktree prune
清理一下!
$ rm -rf ../temp
$ git worktree prune
清理 worktree 之後,記得把相關的 branch 也清理一下,否則下次再開相同的 branch 名稱時,就會出現類似以下的錯誤:
Preparing worktree (new branch 'fix-emergency-issue')
fatal: a branch named 'fix-emergency-issue' already exists
可以用以下指令刪除分支:
$ git branch -d <分支名稱>
列出所有的 worktree
$ git worktree list
上述指令執行結果如下,可以看到 git worktree list
會列出 worktree 的路徑與分支名稱:
/Users/user/workspace/test c3ca774 [test]
/Users/user/workspace/myworktree 391135b [myworktree]
刪除特定 worktree
刪除特定 worktree 可以使用以下指令, worktree remove 可以接受路徑或者分支名稱作為參數:
$ git worktree remove [路徑或分支名稱]
例如:
$ git worktree remove /Users/user/workspace/myworktree
或者:
$ git worktree remove myworktree
References
https://git-scm.com/docs/git-worktree