Git Worktree 讓你再也無需切換分支!
Hello,大家好,我是 Sunday。
讓我們假設(shè)一個(gè)場景:
你正在某個(gè)分支中處理一個(gè)名為“feature”的功能,突然之間需要在主分支(master)中修復(fù)一個(gè)關(guān)鍵性 bug。
如果沒有使用 git worktree,那么你必須:
- 在功能分支(feature)中存儲(chǔ)或提交更改
- 切換到主分支(master),在主分支中修復(fù)錯(cuò)誤,提交修復(fù)
- 切換回功能分支,然后取消存儲(chǔ)或檢出更改。
特別是如果你需要多次來回切換,這就顯得很麻煩了。
但是 如果使用了 git worktree 那么整個(gè)操作的流程就會(huì)變得更加簡單。你可以直接擁有 feature 和 master 兩個(gè)分支的單獨(dú)工作目錄 并且可以分別在不同目錄之間完成開發(fā)工作,不再需要進(jìn)行來回切換
使用 git worktree 完成修復(fù)工作
假設(shè)你目前在 feature 分支上,正在處理項(xiàng)目的開發(fā)工作。突然間,你需要在主分支上修復(fù)一個(gè)錯(cuò)誤。
那么此時(shí)你可以使用以下命令為主分支創(chuàng)建一個(gè)新的工作樹(worktree):
git worktree add ../bugfix master
該命令在當(dāng)前存儲(chǔ)庫的相對路徑 ../bugfix 處創(chuàng)建一個(gè)新目錄,并在該目錄中簽出主分支?,F(xiàn)在,你可以轉(zhuǎn)到 bugfix 目錄并修復(fù) bug:
cd ../bugfix
你在這里進(jìn)行的任何更改都將在主分支上進(jìn)行,并不會(huì)影響其他分支。一旦完成了bug修復(fù),則可以直接提交你的更改:
git commit -am "修復(fù) bug"
現(xiàn)在,你可以返回到原工作目錄并繼續(xù)在原分支(feature)上完成之前的工作:
cd ../feature
在原分支(feature)中的完成過的代碼依然存在,并且你不需要進(jìn)行額外的存儲(chǔ)和切換分支的操作。
這就是使用 git worktree 完成日常工作的操作流程,它 允許我們同時(shí)在多個(gè)分支上工作,并且每個(gè)分支都有自己的工作目錄
讓我們把整個(gè)過程梳理一遍:
## Push 操作
# 從 bugfix 目錄提交 bugfix 分支
cd ../bugfix
git push origin master
# 從 feature 目錄提交 feature 分支
cd ../feature
git push origin feature
## Merge 操作
# 切換分支到 master
cd ..
git checkout master
# 合并代碼到 master
git merge master
# 合并到 feature
git merge feature
## 刪除操作
git worktree remove ../bugfix
git worktree remove ../feature
## 將合并后的更改推送到遠(yuǎn)程倉庫
git push origin master
git worktree 帶來的其他好處
除了上述場景之外,git worktree 還有很多其他好處:
- 代碼審查: 如果你正在審查多個(gè)分支的代碼,可以在單獨(dú)的 worktree 中檢出每個(gè)分支。這樣可以快速的在它們之間切換,而無需每次都執(zhí)行檢出的操作。
- 持續(xù)集成/部署: 如果你有一個(gè)需要同時(shí)處理同一存儲(chǔ)庫的多個(gè)分支的 CI/CD ,git worktree 可以讓每個(gè)分支都在自己的 worktree 中,避免沖突。
- 長時(shí)間運(yùn)行的任務(wù): 如果你有一項(xiàng)長時(shí)間運(yùn)行的任務(wù)(例如:測試套件或代碼構(gòu)建),你希望在一個(gè)分支上運(yùn)行該任務(wù)的同時(shí)繼續(xù)在另一個(gè)分支上工作,可以在一個(gè)目錄中運(yùn)行任務(wù)并在另一個(gè)目錄中工作。(好吧,或許我不該告訴大家這個(gè),因?yàn)楸緛磉@個(gè)時(shí)間你可以愉快地摸魚的,哈哈)