Git worktree 教學

Last updated on  Dec 26, 2022  in  Git 版本控制  by  Amo Chen  ‐ 1 min read

以往開發時如果有遇到馬上得解決的 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

追蹤新知

看完這篇文章了嗎?還意猶未盡的話,追蹤粉絲專頁吧!

我們每天至少分享 1 篇文章/新聞或者實用的軟體/工具,讓你輕鬆增廣見聞提升專業能力!如果你喜歡我們的文章,或是想了解更多特定主題的教學,歡迎到我們的粉絲專頁按讚、留言讓我們知道。你的鼓勵,是我們的原力!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!