用 git stash 暫存工作進度
前言
在進行開發時,偶爾會有進行到一半必須切換分支處理別的工作的情況,這時候使用 git stash
暫存指令就會是個好選擇。
暫存進度(git stash)
在新進度尚未提交(commit)時切換分支,可能會遇到兩種情況:
- 目前進度跟著一起移動到新的分支。
- 因為發現潛在的衝突(conflict), Git 不讓我切換分支。
如果不希望這兩種情況中的任一種發生,可以使用 git stash
將目前「已追蹤」的檔案進度移入暫存區。
需特別注意的是:
git stash
只會將「staged」和「unstaged」的檔案進度移入暫存區。如果有新增的「untracked file」,並需先用git add
加入 staged 清單才會被一起移入暫存區。
這時候會發現進度已經回復到上一次提交的樣子了,而使用 git status
也只會看到「untracked file」被列出來。
git stash
可以建立多個暫存紀錄,不管是在同個分支上建立多個暫存、或是不同分支上建立多個暫存都可以,這些暫存紀錄會用建立時間「由新到舊」保存。
顯示暫存清單(git stash list)
既然可以建立多個暫存,如果想套用其中一個暫存紀錄怎麼辦?這時候就可以用 git stash list
指令列出暫存紀錄清單。
如圖所示,每個暫存項目會有個項目「序號」,從 0 開始由新到舊增加序號,並一併記錄是在哪個分支的哪個提交紀錄建立的。由於「暫存」並不像提交一樣有 commit message 可以做區分,所以僅能靠以上的資訊辨別不同的暫存內容。
恢復暫存進度
有了暫存進度後,如果想要回復或者說套用暫存進度,有兩種方法可以使用。分別是 pop
和 apply
,兩者的差別在於套用進度之後,暫存紀錄的消失與否。暫存進度的套用不限建立暫存的分支使用,可用於任何一個分支。如果沒有指定某個序號的紀錄,預設會套用最新一次的暫存紀錄。
偶爾在套用暫存進度時會產生衝突,這時只要像處理 merge conflict 一樣,將內容調整成希望的樣子,並用 git add
確認套用即可。
git stash pop
使用 git stash pop
套用進度時,原本在暫存區的紀錄「會」從清單中消失。可以使用的指令如下:
1 |
|
執行之後再次用 git stash list
就會發現紀錄從清單中消失了!
git stash apply
如果我們希望在多個分支套用相同的暫存內容,則可以使用 git stash apply
,該 指令執行後原本在暫存區的紀錄「不會」從清單中消失,可以繼續在其他地方使用。指令如下:
1 |
|
執行之後再次用 git stash list
會發現紀錄仍然存在清單中沒變。
刪除暫存進度
建立暫存後也不一定要使用,可以直接刪除暫存紀錄。指令如下:
1 |
|
執行之後再次用 git stash list
就會發現紀錄從清單中消失了!
文章內容如有錯誤,歡迎留言討論!
本 Blog 上的所有文章除特别聲明外,均採用 CC BY-SA 4.0 協議 ,轉載請註明出處!