1. 程式人生 > >Git——緊急情況:「立即給我打個包,現在馬上!」

Git——緊急情況:「立即給我打個包,現在馬上!」

緊急情況:「立即給我打個包,現在馬上!」

前面在講 branch 的時候講到,利用 branch 可以實現一人多工的需求,從而可以輕鬆應對 「嘿,這個先別做了,給你個新活」的情況。但有時,尤其是在網際網路公司,你可能會遇到比這更緊 急的情況:你正對著電腦發呆,忽然見到一個同事屁股著著火就跑來找你了:「快快快,立即給我打 個包,現在馬上,拜託拜託!」

 

這種情況和「這個 branch 先放放吧」不同,你沒時間、也沒必要當場慌慌張張把檔案的所有改動做個臨時的 commit 然後去救同事的火,救完火再重新把 commit 撤銷回來。這時候你只要先把所有 檔案一股腦扔在一邊就可以去給同事打包了,打完包再把剛才扔到一邊的檔案重新取過來就好。

 

這一「扔」一「取」,用的是 Git 的 stash 指令。

 

stash:臨時存放工作目錄的改動

"stash" 這個詞,和它意思比較接近的中文翻譯是「藏匿」,是「把東西放在一個祕密的地方以備未來 使用」的意思。在 Git 中, stash 指令可以幫你把工作目錄的內容全部放在你本地的一個獨立的地 方,它不會被提交,也不會被刪除,你把東西放起來之後就可以去做你的臨時工作了,做完以後再來取走,就可以繼續之前手頭的事了。

 

具體說來, stash 的用法很簡單。當你手頭有一件臨時工作要做,需要把工作目錄暫時清理乾淨,那 麼你可以:

git stash

 

就這麼簡單,你的工作目錄的改動就被清空了,所有改動都被存了起來。

 

然後你就可以從你當前的工作分支切到 master 去給你的同事打包了……

 

打完包,切回你的分支,然後:

git stash pop

 

你之前儲存的東西就都回來了。很方便吧?

 

注意理:沒有被track的檔案(即從來沒有被 add 過的檔案不會被 stash 起來,因為 Git 會忽 略它們。如果想把這些檔案也一起 stash,可以加上 `-u` 引數,它是 `--includeuntracked` 的簡寫。就像這樣:

git stash -u