為什麼我們需要它
不得不說,在知道這個命令的時,以及之後的使用中,我都超級熱愛這個命令,因為它真的太好用了。
給大家說一下我使用這個命令的場景:
此時我在 feature_666 分支,非常聚精會神加持高專注地實現一個功能 666 模組,簡直鍵盤如飛的編寫程式碼~~~
然後這時,客戶反饋出一個 bug , 非常嚴重,必須立馬解決,優先順序為 0 !!!
於是,我需要去到 release 分支去 checkout 新的分支去工作了,但是 666 功能還沒完成怎麼辦?
此時我面臨著一個選擇題:
A:提交後切換,程式碼儲存到分支 feature_666,卻產生一個無意義的提交
B:不提交直接切換,然而這個選項根本沒人會選。
是不是很難選,此時,別忘記還有 C 選項!
C:使用 git stash , 將當前修改(未提交的程式碼)存入快取區,切換分支修改 bug ,回來再通過 git stash pop 取出來。
git stash //將修改儲存到暫存區,工作區會刪除這些修改
git checkout <bug_branch>
檢視修改
如果你有丟失程式碼的經歷,肯定會對這個之前沒接觸的新命令不放心,那麼怎麼確定你操作成功了呢?
git stash show //檢視剛才暫存的修改
取出修改
現在 bug 改完了,要重新回來開發了,取出修改
git checkout <feture_branch> //切換剛才功能開發的分支
git stash pop //取出修改
修改儲存到什麼位置了?
當我們使用 git init
給專案新增版本控制的時候,會在專案路徑下生成一個 .git
隱藏資料夾。.git
中儲存著版本管理的所有資訊。
.git/refs/stash 中,儲存的是最後一個 stash 對應的節點指標
同樣,在 .git/log/refs/stash 中可以看到我們全部的 stash 記錄資訊
儲存多個 stash 的情況
ok ,我們來嘗試一下修改檔案,然後再次使用 git stash ,此時我們有個兩個 暫存修改,那麼怎麼檢視呢?
git stash list //檢視暫存區的所有暫存修改記錄
如果在未提交的情況下,執行 git stash 兩次,無法準確分辨兩個stash 具體修改的是哪些內容,這樣用,顯的偉大的 Git 一點都不智慧,怎麼可以!。
所以,在這種情況下,給 stash 儲存的修改起個名字,顯然非常重要,方式如下:
git stash save <message>
取出也有好幾種方式
上面的演示中,取出 stash 的方式都是
git stash pop //取出最近一次暫存並刪除記錄列表中對應記錄
這是一個非常好用的取出方式,一般使用的頻率最高,但並非適用所有情況。
因為 git stash pop 是彈出棧頂的一個 stash ,也就是最後一次儲存的 stash。在儲存多個stash ,想取出非棧頂的一個的情況下,是不適用的。
這個時候要使用:
git stash list //檢視暫存區的所有暫存修改
git stash apply stash@{X} //取出相應的暫存
git stash drop stash@{X} //將記錄列表中取出的對應暫存記錄刪除
結語
雖然,所有的 git 命令都能從 Git文件 上能檢視到,但是總是要自己親自敲過這些命令,這些技能才能自己掌握。
不得不說,使用命令列真的才是使用 git 的正確方式,真的超爽!