git shanchu stash_git stash用法
常用git stash命令:
(1)git stash?save "save message"? : 執(zhí)行存儲(chǔ)時(shí),添加備注,方便查找,只有g(shù)it stash 也要可以的,但查找時(shí)不方便識(shí)別。
(2)git stash list?:查看stash了哪些存儲(chǔ)
(3)git stash show?:顯示做了哪些改動(dòng),默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯,后面加stash@{$num},比如第二個(gè) git stash show stash@{1}
(4)git stash show -p?: 顯示第一個(gè)存儲(chǔ)的改動(dòng),如果想顯示其他存存儲(chǔ),命令:git stash show? stash@{$num}??-p ,比如第二個(gè):git stash show??stash@{1}??-p
(5)git stash apply?:應(yīng)用某個(gè)存儲(chǔ),但不會(huì)把存儲(chǔ)從存儲(chǔ)列表中刪除,默認(rèn)使用第一個(gè)存儲(chǔ),即stash@{0},如果要使用其他個(gè),git stash apply?stash@{$num} ,?比如第二個(gè):git stash apply?stash@{1}
(6)git stash pop?:命令恢復(fù)之前緩存的工作目錄,將緩存堆棧中的對(duì)應(yīng)stash刪除,并將對(duì)應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下,默認(rèn)為第一個(gè)stash,即stash@{0},如果要應(yīng)用并刪除其他stash,命令:git stash pop?stash@{$num} ,比如應(yīng)用并刪除第二個(gè):git stash pop?stash@{1}
(7)git stash drop?stash@{$num} :丟棄stash@{$num}存儲(chǔ),從列表中刪除這個(gè)存儲(chǔ)
(8)git stash clear?:刪除所有緩存的stash
說明:新增的文件,直接執(zhí)行stash是不會(huì)被存儲(chǔ)的,舉例如下:
如上圖:在git status 那一步很明顯可以看出來,我修改了README,添加了新文件abc.txt,然后執(zhí)行了git stash save后,在執(zhí)行g(shù)it stash list 可以看到剛才的save是的信息,然后使用git stash show ,只顯示了README的改動(dòng)被存起來了。
我們知道,執(zhí)行了git statsh 以后,被存起來的在當(dāng)前目錄再執(zhí)行g(shù)it status 就看不到了,但是我們現(xiàn)在再執(zhí)行g(shù)it status,如下:
這個(gè)文件還在,說明沒有被存起來。說白了就是沒有在git 版本控制中的文件,是不能被git stash 存起來的。
那要怎么辦呢,這個(gè)文件我也想存起來,很明顯,先執(zhí)行下git add 加到git版本控制中,然后再git stash就可以了,如下:
最后一步可以看出來,這個(gè)新增文件已經(jīng)被stash了。
這個(gè)時(shí)候再執(zhí)行下git status ,被存起來的在當(dāng)前目錄就看不到了,如下:
這個(gè)時(shí)候,想切分支就再也不會(huì)報(bào)錯(cuò)有改動(dòng)未提交了。
如果要應(yīng)用這些stash,直接使用git stash apply或者git stash pop就可以再次導(dǎo)出來了。
總結(jié)下:git add 只是把文件加到git 版本控制里,并不等于就被stash起來了,git add和git stash 沒有必然的關(guān)系,但是執(zhí)行g(shù)it stash 能正確存儲(chǔ)的前提是文件必須在git 版本控制中才行。
參考的一個(gè)鏈接中說到了以下,我摘錄此處備份下(就是只stash一部分文件):
常規(guī) git stash 的一個(gè)限制是它會(huì)一下暫存所有的文件。有時(shí),只備份某些文件更為方便,讓另外一些與代碼庫保持一致。一個(gè)非常有用的技巧,用來備份部分文件:
add 那些你不想備份的文件(例如: git add file1.js, file2.js)
調(diào)用 git stash –keep-index。只會(huì)備份那些沒有被add的文件。
調(diào)用 git reset 取消已經(jīng)add的文件的備份,繼續(xù)自己的工作。
另外還可以使用git stash --patch[-p],(https://www.jianshu.com/p/fe4d54cb6244)
比如有個(gè)場(chǎng)景是:在本地改了大量的代碼,但是有兩個(gè)文件是適配本地的配置文件不需要上庫,如果git commit [filename]的話需要寫很多文件,很不方便,于是使用了stash方法,這里做個(gè)記錄.
首先解釋下git stash的作用,git stash是將本地沒有commit的部份全部存儲(chǔ)起來,這樣方便你進(jìn)行pull之類的操作,具體可以參考Git 工具 - 儲(chǔ)藏與清理.
但是如果直接git stash的話,會(huì)將當(dāng)前所有文件都存儲(chǔ)起來,而我只想存儲(chǔ)兩個(gè)配置文件,其他的全部一起commit,這應(yīng)該怎么辦呢?這里需要用到一個(gè)git stash -p的命令;它是一個(gè)交互式命令,我們可以一個(gè)文件一個(gè)文件的遍歷,決定每個(gè)文件的操作方式.
root /u/c/s/cbs (master)# git stash -p
diff --git a/cmd/scripts/cbs.sh b/cmd/scripts/cbs.sh
old mode 100644
new mode 100755
Stash mode change [y,n,q,a,d,/,?]?
這里的[y,n,q,a,d,/,?]分別代表的含義如下:
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
所以,遇到我們需要stash的文件,我們就y,不需要stash需要commit的文件,我們就n,如果接下來沒有需要stash的文件,則直接q退出就行.
將文件保存好后,我們就可以commit和push剩下的代碼了.
git commit -m ""
git push origin master
然后我們將stash的文件恢復(fù)到本地,所有的操作就完成了.
git stash pop
參考鏈接:
https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html
https://blog.csdn.net/jeffasd/article/details/53107182
總結(jié)
以上是生活随笔為你收集整理的git shanchu stash_git stash用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击改变div高度_css实现div两列
- 下一篇: 2022-2028年中国氮肥行业投资分析