如果手邊有工作必須暫停,轉去處理其他工作,有兩種方式暫時儲存目前手邊的工作:
- 開分支、提交要暫存的工作、再用
git reset --soft HEAD^
恢復; - 使用
git stash
指令。
Stash
- Stash事實上是暫用來儲存目前工作狀態的獨立commit
- 可用 refs/stash 參照來存取
- Stash恢復衝突處理
git stash pop
一般會自動丟棄stash stack已被恢復的工作狀態,但如果遇到衝突就不會自動丟棄,必須手動用git stash drop
移除已經處理好衝突且被恢復的stashgit stash branch 新分支名
也能替最新的stash開新分支、提交後再來處理恢復stash產生的衝突問題
git stash apply
可以套用最新的Stash,但不會像git stash pop
指令自動移除套用的Stash。
# 基本指令
$ git stash save // 暫存目前工作目錄和Index
$ git stash save "WIP: 自訂stash訊息" // 自訂satsh暫存訊息並暫存目前工作目錄和Index
$ git stash pop // 從暫存堆積移出儲存的工作並合併入目前的工作(不會覆寫或覆蓋檔案)
$ git stash apply // 套用最新的Stash但不會移除該Stash
# 檢視Stash指令
$ git stash list
$ git show-branch stash
$ git stash show // 顯示最新的stash與前一commit的變更差異(只會顯示stash@{0})
$ git stash show --stat // 等同前一指令(default)
$ git stash show -p // -p子指令用來取得補綴檔案的變更差異
Stash指令也可以用來避免 git pull
因衝突而無法拉下的狀況
git stash --includev
可暫存任何新的且未被added的檔案,能避免存在同名檔案而無法拉下的狀況;--all
子指令除了未被added的檔案,連.gitignore
忽略、"not included" 的檔案都能暫存;-p
或--patch
則是能選擇性暫存需要暫時儲存的檔案。