一直有個情境,我可能需要做feature或是hotfix 項目,但有些地方可能需要參考某個分支的版本,
此時我就必須先暫存目前的進度,然後切換到參考的分支,將要參考的檔案內容想辦法記錄起來,
然後切回剛剛暫存的進度,繼續開發...;後來發現這個情境,應該可以借用 git worktree …
git-worktree 指令可以方便產生多個工作目錄的情境,而出來的目錄可以任意放在其它路徑;雖然
有多個目錄都是吃到同一個 .git ,多生出來工作目錄的 .git 會指向原本的 .git 下的 worktree,故相
關分支上的修改,都還是可以任意合併,以下慢慢帶出
使用jquery 原始檔來示範
先 clone 下來
此時使用 vscode 開啟目標看一下
再來透過指令 worktree list 檢視一下目前工作目錄
先開個 dev 的本地分支出來,並且檢視工作目錄
由上圖可看出,即使目前我們切換到 dev 分支,工作目錄依然在temp\jquery
此時我們先來修改檔案 src\wrap.js
並且尚未 commit
再來要準備要產生新的工作目錄 jquery-hotfix,可以使用指令
git worktree add -b [new branch name] [new folder name] [from branch]
[new branch name] :新的分支名稱
[new folder name]:新的工作目錄路徑與名稱
[from branch]:來源參考分支
建立完成後,檢視 worktree 及實際目錄,其中右方代表該目錄目前對應的分支
我們實際看一下存在著哪些分支
由以上我們看出來 hotfix 分支,實際是由 jquery 目錄下的 .git 管理
而jquery-hotfix 目錄下的 .git 應該是指到 jquery 下的 worktree
回到 jquery 的 .git/worktree 目錄下,可以看到 jquery-hotfix 資料夾
此時我們可以開啟 jquery-hotfix 下的 src\wrap.js 檔案,並且實現檢視某個版本的相同檔案
接下來先把上回 dev 修改簽入
再來切換到 jquery-hotfix 目錄並且查看 分支狀況
上圖得知
雖然命令提示字元右方 沒有寫是哪個分支,但是透過 git status 的訊息,可以看到目前為 hotfix 分支
此時我們修改 src\warp.js 檔案
再看一下狀態
此時簽入
再看一下狀態
此時我們將目錄切到 jquery,並且看一下狀態及分支
值得注意的是,若是另一個「工作目錄」其分支的顏色會不同
此時我們透過git指令將 jquery-hotfix 目錄移除,語法如下
git worktree remove [folder path]
查看目錄就只剩下 jquery 資料夾了
查看 jquery 目錄下的 .git / worktree ,發現已經移除了
查看分支,hotfix 還在
可以切換到 hotfix 分支檢視 src\warp.js 檔案
以上收工
【參考】
沒有留言:
張貼留言