一、應用場景
- 當正在dev分支上開發某個項目,這時項目中出現一個bug,需要緊急修復,但是正在開發的內容只是完成一半,還不想提交,這時可以用git stash命令將修改的內容保存至堆棧區,然後順利切換到hotfix分支進行bug修復,修復完成後,再次切回到dev分支,從堆棧中恢復剛剛保存的內容。
- 由於疏忽,本應該在dev分支開發的內容,卻在master上進行了開發,需要重新切回到dev分支上進行開發,可以用git stash將內容保存至堆棧中,切回到dev分支後,再次恢復內容即可。
總的來說,git stash命令的作用就是將目前還不想提交的但是已經修改的內容進行保存至堆棧中,後續可以在某個分支上恢復出堆棧中的內容。這也就是說,stash中的內容不僅僅可以恢復到原先開發的分支,也可以恢復到其他任意指定的分支上。git stash作用的範圍包括工作區和暫存區中的內容,也就是說沒有提交的內容都會保存至堆棧中。
二、命令使用
1、git stash
保存當前工作進度,會把暫存區和工作區的改動保存起來。執行完這個命令後,在運行git status命令,就會發現當前是一個乾淨的工作區,沒有任何改動。
git stash
使用save可以添加一些註釋。
git stash save 'message...'
2、git stash list
顯示保存進度的列表。
3、git stash pop [–index] [stash_id]
如下爲恢復最新的進度到工作區。git默認會把工作區和暫存區的改動都恢復到工作區。
git stash pop
如下爲恢復最新的進度到工作區和暫存區。(嘗試將原來暫存區的改動還恢復到暫存區)
git stash pop --index
如下爲恢復指定的進度到工作區。stash_id是通過git stash list命令得到的。
git stash pop stash@{1}
通過git stash pop命令恢復進度後,會刪除當前進度
4、git stash apply [–index] [stash_id]
將堆棧中的內容應用到當前目錄,不同於git stash pop,該命令不會將內容從堆棧中刪除,也就說該命令能夠將堆棧的內容多次應用到工作目錄中,適應於多個分支的情況。
5、git stash drop [stash_id]
刪除一個存儲的進度。如果不指定stash_id,則默認刪除最新的存儲進度。
6、git stash clear
刪除所有存儲的進度。
7、git stash show
查看堆棧中最新保存的stash和當前目錄的差異。
8、git stash branch
從最新的stash創建分支。
應用場景:當儲藏了部分工作,暫時不去理會,繼續在當前分支進行開發,後續想將stash中的內容恢復到當前工作目錄時,如果是針對同一個文件的修改(即便不是同行數據),那麼可能會發生衝突,恢復失敗,這裏通過創建新的分支來解決。可以用於解決stash中的內容和當前目錄的內容發生衝突的情景。
發生衝突時,需手動解決衝突。
參考來自:
https://blog.csdn.net/stone_yw/article/details/80795669,
https://blog.csdn.net/daguanjia11/article/details/73810577,
https://git-scm.com/docs/git-stash/2.0.0