假設(shè)你正在為你的產(chǎn)品增加一項新需求。正在編寫新需求代碼時,突然出現(xiàn)了一起客戶投訴的Bug。這時,你不得不暫時放下手頭上的新需求一段時間。你還不能commit未完成的代碼,當(dāng)然你也肯定不想把已經(jīng)寫好的代碼給丟棄掉。所以你需要一些臨時的存儲空間,這些空間你可以用來存儲未完成的改變并在稍后commit它。
在Git中,stash操作可以將你的一系列修改保存起來,并保證在你需要的任何時候能重新運用它。
[Jeremy@MagicWorld project]$ git status
-s
M string.c
?? string
現(xiàn)在你要轉(zhuǎn)換branch到客戶投訴的問題上來,但是你不想commit已經(jīng)寫過但未完成的代碼。所以你需要stash這些改變,并push這個新的stash到你的stack上。以上這些操作只需要運行git stash的命令:
[Jeremy@MagicWorld project]$ git stash
Saved working directory and index state WIP on master: e86f062 Added my_strcpy function
HEAD is now at e86f062 Added my_strcpy function
上面操作結(jié)束后, 你的working directory并不會發(fā)生改變,因為所有的改變都已經(jīng)保存在了stack上。可以通過git status命令去驗證是不是這樣。
[Jeremy@MagicWorld project]$ git status -s
?? string
到目前為止,你可以安全地切換你的branch并在其他分支上編寫代碼。而我們只需要通過git stash list命令就可以查看已經(jīng)被stash過的一系列改變。
[Jeremy@MagicWorld project]$ git stash list
stash@{0}: WIP on master: e86f062 Added my_strcpy function
假設(shè)現(xiàn)在你已經(jīng)解決了客戶投訴的問題,你要回到新需求的編寫上來繼續(xù)未完成的代碼,你只需直接執(zhí)行git stash pop命令就可以。這個命令可以把stack上存放的改變給清空,同時把這些改變放置到你當(dāng)前的working directory中。
[Jeremy@MagicWorld project]$ git status -s
?? string
[Jeremy@MagicWorld project]$ git stash pop
現(xiàn)在你就可以繼續(xù)你未完成的工作了。
上面所說的命令會出現(xiàn)以下這些結(jié)果:
# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
#
modified: string.c
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
#
string
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (36f79dfedae4ac20e2e8558830154bd6315e72d4)
[Jeremy@MagicWorld project]$ git status -s
M string.c
?? string
本文翻譯自Git - Stash Operation如有轉(zhuǎn)載請注明出處,謝謝!
Tips:
stash : vt. 存放;貯藏