有時你會遇到這樣的事情,當你正在進行項目中某一部分的工作,裡面的東一處于一個雜亂的狀态,而你想轉到其他分支上進行工作,問題是你不想送出進行了一半的工作,否則以後無法回到這個工作點,或者你有commit送出然後push的,但是其中有幾個修改需要保留使用,但是不用送出和push,解決這些問題的辦法就是git stash,“git stash”可以擷取你工作目錄的中間狀态(也就是你修改過的被追蹤的檔案和暫存的變更,并将它儲存到一個未完結變更的堆棧中,随時可以重新應用)
儲藏你的工作
1、儲藏
(1)當你所在的分支有未送出的檔案時,你想切換到其他分支
(2)你在自己的分支commit後,有幾個檔案不需要commit和push,而這幾個檔案需要保留
以上兩種情況可以使用git stash, 然後git status 查詢後,會發現沒有待commit和add的,非常幹淨
這裡推薦使用 :git stash save 說明資訊
如果直接使用git stash 系統會自動配置設定說明資訊,這裡自己添加會友善自己查詢的時候知道
2、檢視儲藏:
git stash list 會檢視所有的儲藏
顯示:
stash@{0}: WIP on master: 2fa5745 ***********
stash@{1}: WIP on master: 5fa5748 ***********
stash@{2}: WIP on master: 3fa5743 ***********
…
這裡顯示所有的儲藏清單
注: 最近的是stash@{0}
3、 應用儲藏
git stash apply ------應用最近的一次儲藏
git stash apply stash@{1} ------應用某一個儲藏
對檔案的變更被重新應用,但是被暫存的檔案沒有被重新暫存,想這樣的話,必須在執行git stash apply 的時候後面帶一個 --index 選項,來告訴指令重新應用被暫存的變更,如果這麼做,那就回到了原來的位置:git stash apply --index
apply 選項隻嘗試應用儲存的工作——儲藏的内容仍然在棧上,要移除它,
執行:git stash drop 名字,例如:git stash drop stash@{1}
如果想删除所有的儲藏,可以執行:git stash clear
你也可以執行:git stash pop 來重新應用儲藏,同時立刻将其從堆棧中移走
4、取消儲藏
在某些情況下,你可能想應用儲藏的修改,在進行了一些其他的修改之後,又要取消之前所應用儲藏的修改,但是git沒有類似于git unapply 的指令,但可以通過取消該收藏的更新檔達到同樣的效果。
git stash show -p stash@{1} | git apply -R
如果不指定某個儲藏,git會選擇最近的儲藏:git stash show -p | git apply -R
如果想把上面的指令設定成 git stash-unapply
執行:git config --global alia.stash-unapply ‘!git stash show -p | git apply -R’
5、 如果你儲藏了一些工作,暫時不去理會,然後繼續在你儲藏分支上工作,你在重新應用工作時,可能會碰到一些問題,如果嘗試應用的變更是針對一個你那之後修改過的檔案,你會碰到一個歸并沖突,并且必須去化解它,如果你想用更友善的方法來重新檢驗你儲藏的變更, 你可以運作 git stash branch ,這會建立一個新的分支,檢出你儲藏工作時的所處的送出,重新應用你的工作,如果成功,将會丢棄儲藏。
例:git stash branch 新分支名
這是一個很棒的捷徑來恢複儲藏的工作然後在新的分支上繼續當時的工作。