Git-命令列-使用 git stash 暫存程式碼

帥總吖發表於2019-08-01

為什麼我們需要它
不得不說,在知道這個命令的時,以及之後的使用中,我都超級熱愛這個命令,因為它真的太好用了。

給大家說一下我使用這個命令的場景:

此時我在 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 的正確方式,真的超爽!

 

相關文章