當(dāng)你想要保存當(dāng)前的暫存區(qū)和工作區(qū)的狀態(tài)的時(shí)候,你可以使用git stash命令。比如:你正在開(kāi)發(fā)一個(gè)新功能悴灵,寫(xiě)了一些代碼(保存暫存的和沒(méi)有暫存的或沒(méi)有記錄的)丹泉,現(xiàn)在需要去修復(fù)一個(gè)緊急bug,你又不想提交帆精,這時(shí)你可以選擇保存當(dāng)前工作區(qū)和暫存區(qū)的內(nèi)容较屿,需要的時(shí)候恢復(fù)隧魄。
這個(gè)命令會(huì)保存當(dāng)前的暫存區(qū)和工作區(qū)的狀態(tài),然后返回到HEAD(git reset —hard HEAD)隘蝎。最新的stach可以在.git/refs/stash中看到购啄。
git stash save
save [-p|—patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|—all] [-q|—quiet] [message]
[ ]代表這個(gè)參數(shù)是可選的
-k|--keep-index 表示 stash之后,所有對(duì)暫存區(qū)的改變會(huì)維持不變(比如你之前add 了一個(gè)file末贾,提交之后闸溃,git status還是能夠在暫存區(qū)看到你的 add),如果是—no-keep-index的話,stash之后的狀態(tài)就是git reset —hard HEAD拱撵。
-p|—patch 不太了解辉川,只知道用了會(huì)開(kāi)啟一個(gè)交互式的界面讓你選擇
-u|--include-untracked 會(huì)把沒(méi)有記錄到的文件也保存下來(lái)(比如你新建了一個(gè)文件,但是還沒(méi)有g(shù)it add拴测,stash也會(huì)把這個(gè)文件保存下來(lái))
-a|—all 會(huì)把忽略的文件也保存下來(lái)(.gitignore中的)
-q|—quiet 終端不打印輸出
message 一個(gè)對(duì)這個(gè)stash的描述乓旗,如果執(zhí)行g(shù)it stash list,我們能夠看到這個(gè)描述
git stash list
list [options]
不加options,會(huì)列出所有的stash集索,你也可以指定某個(gè)stash(stash@{0}代表最近的stash)
git stash show [stash]
顯示和他parent的差異
git stash pop
pop [—index] [-q|—quiet] [stash]
與git stash save執(zhí)行相反的操作屿愚,從stash list中移除這個(gè)stash,恢復(fù)工作區(qū)
—index 如果指定了這個(gè)參數(shù)务荆,那么不僅恢復(fù)工作區(qū)妆距,也會(huì)恢復(fù)暫存區(qū)
git stash apply
apply [—index] [-q|—quiet] [stash]
和pop類(lèi)似,區(qū)別在于apply不會(huì)吧stash從stash list中移除
git stash branch
branch [branchname] [stash]
以這個(gè)stash被創(chuàng)建的那個(gè)commit為起點(diǎn)函匕,創(chuàng)建一個(gè)叫branchname的分支娱据,然后再在這個(gè)分支執(zhí)行g(shù)it stash pop —index stash
git stash clear
清空當(dāng)前所有的stash
git stash create
創(chuàng)建一個(gè)stash,并返回他的commit對(duì)象盅惜,但并不在refs中存儲(chǔ)這個(gè)對(duì)象
git stash store
存儲(chǔ)通過(guò)create創(chuàng)建的stash中剩。(可以在refs的stash和log/refs下看到這個(gè)stash)