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

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

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

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