掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者 灰灰。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

stash,譯為存放,在 git 中,可以理解為保存當(dāng)前工作進(jìn)度,會(huì)把暫存區(qū)和工作區(qū)的改動(dòng)進(jìn)行保存,這些修改會(huì)保存在一個(gè)棧上
后續(xù)你可以在任何時(shí)候任何分支重新將某次的修改推出來(lái),重新應(yīng)用這些更改的代碼
默認(rèn)情況下,git stash會(huì)緩存下列狀態(tài)的文件:
但以下?tīng)顟B(tài)的文件不會(huì)緩存:
如果想要上述的文件都被緩存,可以使用-u或者--include-untracked可以工作目錄新的文件,使用-a或者--all命令可以當(dāng)前目錄下的所有修改
關(guān)于git stash常見(jiàn)的命令如下:
保存當(dāng)前工作進(jìn)度,會(huì)把暫存區(qū)和工作區(qū)的改動(dòng)保存起來(lái)
git stash save可以用于存儲(chǔ)修改.并且將git的工作狀態(tài)切回到HEAD也就是上一次合法提交上
如果給定具體的文件路徑,git stash只會(huì)處理路徑下的文件.其他的文件不會(huì)被存儲(chǔ),其存在一些參數(shù):
--keep-index 或者 -k 只會(huì)存儲(chǔ)為加入 git 管理的文件
--include-untracked 為追蹤的文件也會(huì)被緩存,當(dāng)前的工作空間會(huì)被恢復(fù)為完全清空的狀態(tài)
-a 或者 --all 命令可以當(dāng)前目錄下的所有修改,包括被 git 忽略的文件
顯示保存進(jìn)度的列表。也就意味著,git stash命令可以多次執(zhí)行,當(dāng)多次使用git stash命令后,棧里會(huì)充滿未提交的代碼,如下:
其中,stash@{0}、stash@{1}就是當(dāng)前stash的名稱
git stash pop 從棧中讀取最近一次保存的內(nèi)容,也就是棧頂?shù)膕tash會(huì)恢復(fù)到工作區(qū)
也可以通過(guò) git stash pop + stash名字執(zhí)行恢復(fù)哪個(gè)stash恢復(fù)到當(dāng)前目錄
如果從stash中恢復(fù)的內(nèi)容和當(dāng)前目錄中的內(nèi)容發(fā)生了沖突,則需要手動(dòng)修復(fù)沖突或者創(chuàng)建新的分支來(lái)解決沖突
將堆棧中的內(nèi)容應(yīng)用到當(dāng)前目錄,不同于git stash pop,該命令不會(huì)將內(nèi)容從堆棧中刪除
也就說(shuō)該命令能夠?qū)⒍褩5膬?nèi)容多次應(yīng)用到工作目錄中,適應(yīng)于多個(gè)分支的情況
同樣,可以通過(guò)git stash apply + stash名字執(zhí)行恢復(fù)哪個(gè)stash恢復(fù)到當(dāng)前目錄
查看堆棧中最新保存的stash和當(dāng)前目錄的差異
通過(guò)使用git stash show -p查看詳細(xì)的不同
通過(guò)使用git stash show stash@{1}查看指定的stash和當(dāng)前目錄差異
git stash drop + stash名稱表示從堆棧中移除某個(gè)指定的stash
刪除所有存儲(chǔ)的進(jìn)度
當(dāng)你在項(xiàng)目的一部分上已經(jīng)工作一段時(shí)間后,所有東西都進(jìn)入了混亂的狀態(tài), 而這時(shí)你想要切換到另一個(gè)分支或者拉下遠(yuǎn)端的代碼去做一點(diǎn)別的事情
但是你創(chuàng)建一次未完成的代碼的commit提交,這時(shí)候就可以使用git stash
例如以下場(chǎng)景:
當(dāng)你的開(kāi)發(fā)進(jìn)行到一半,但是代碼還不想進(jìn)行提交 ,然后需要同步去關(guān)聯(lián)遠(yuǎn)端代碼時(shí).如果你本地的代碼和遠(yuǎn)端代碼沒(méi)有沖突時(shí),可以直接通過(guò)git pull解決
但是如果可能發(fā)生沖突怎么辦.直接git pull會(huì)拒絕覆蓋當(dāng)前的修改,這時(shí)候就可以依次使用下述的命令:
或者當(dāng)你開(kāi)發(fā)到一半,現(xiàn)在要修改別的分支問(wèn)題的時(shí)候,你也可以使用git stash緩存當(dāng)前區(qū)域的代碼

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流