stash類似於數據結構的棧區,主要應用場景是當想切換分支時,工作目錄是髒的(即有修改,還未提交),此時可以臨時存儲在棧區中,之後分支切換回來,在恢復爲之前的工作空間。
注:臨時存儲的棧區容易被遺忘,所以創建時指定message選項。
棧區的操作有:元素的增,刪,查。棧區的清空。
官網鏈接:https://git-scm.com/docs/git-stash,或者在本地輸入git stash --help。
1、元素
增,刪,改,查
1.1 保存
執行git stash命令或git stash save命令會存儲元素。它的語法格式如下:
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [-m|--message <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]]
顯示的結果如下:
$ git stash saved working directory and index state WIP on master: cf58f6f 解決dev分支合併到master分支的衝突
冒號之前的部分爲固定的字符串,表示stash存儲了工作目錄和索引中變更。冒號後面的部分爲參照版本庫對應的Commit信息,ID,msg。
WIP全稱爲work in progress,指進行中的工作
選項:
-q,quiet, -p patch, -pathspec-from-file, -pathspec-from-nul, -pathspec是公共的選項
-m:stash的操作日誌信息。
文件類型有三種,被忽略的,未追蹤的,已追蹤的。
-a:包含所有的文件,包括被忽略的文件。
-u:包含未追蹤的文件。
-k:不緩存已經暫存的內容
1.2 查看
執行git stash show查看單個元素,它的語法格式爲:
git stash show [<options>] [<stash>]
stash標識,執行git stash show stash@{0}的結果如下:
A.txt | 1 + 1 file changed, 1 insertion(+)
顯示的結果與git diff --cached差不多,是索引與當前提交對象比較之後的變更集。
1.3 取出
執行git stash pop或apply恢復工作目錄和INDEX。pop與apply的區別在於pop會取出棧頂的元素並刪除,apply只取出棧頂的元素。
-q || quiet:不打印任何日誌信息。
<stash>:stash的標識,例如stashh@{0},它由三部分組成,stash,@,{number},其中number類似於棧的索引。
執行git stash apply,之後查詢git stash list,會發現stash@{0}還在。執行git stash pop,之後查詢git stash list,stash@{0}已被刪除。
1.4 刪除
執行git stash drop移除棧中的元素,它的語法格式爲:
git stash drop [-q|--quiet] [<stash>]
-q | quiet選項不打印任何輸出內容。
stash爲元素的標識
2、棧區
查看,清空。
2.1 查詢
git stash list的命令格式爲
git stash list [<options>]
它用於查詢stash中的內容,可以把stash理解爲棧,git stash list查詢棧中所有元素。顯示的結果如下:
stash@{0}: WIP on master: 67402fc 提交文件A.txt
2.2 清空
執行git stash clear清空棧。它沒有任何選項