鮮為人知但功能強(qiáng)大的 Git 技術(shù)
Stashing 允許您保留對(duì)存儲(chǔ)庫所做更改的副本,而無需創(chuàng)建提交。
如果您正在切換上下文,這非常有用,尤其是當(dāng)您在同一個(gè)項(xiàng)目的不同錯(cuò)誤或任務(wù)之間來回切換時(shí)。
git stash 的基本操作
在處理并行工作時(shí),您可以使用 git stash 來簡化您的工作流程。想象一下,您正在處理一項(xiàng)長期運(yùn)行的任務(wù),并在本地工作副本中進(jìn)行了更改。然后,出現(xiàn)緊急情況,您必須立即處理。
stashing 更改的標(biāo)準(zhǔn)工作流程是:
- 進(jìn)行本地更改
- 存儲(chǔ)本地更改
- <其他作品>
- 重新應(yīng)用隱藏的更改
當(dāng)您使用git stash [push]命令存儲(chǔ)更改時(shí),git 將重置為 HEAD。然后,您可以繼續(xù)處理您需要的任何事情,提交到存儲(chǔ)庫,就好像您從未進(jìn)行過原始更改一樣。
一旦你首先完成了任何讓你偏離軌道的事情,使用git stash pop應(yīng)用你的更改并將它們從存儲(chǔ)中刪除。您還可以使用 git stash apply 應(yīng)用您的更改并將它們保存在存儲(chǔ)中。如果您想快速將更改應(yīng)用到多個(gè)分支,這可能很有用。
使用多個(gè) Stash
如果您真的很忙,您可能會(huì)發(fā)現(xiàn)自己同時(shí)處理多項(xiàng)任務(wù),并且您可能需要將它們?nèi)侩[藏起來。別擔(dān)心, git stash 就是為此而構(gòu)建的。
每次使用 git stash push 時(shí),都會(huì)保存另一組更改。使用git stash list顯示您已隱藏的所有內(nèi)容。你會(huì)看到有點(diǎn)像這樣的東西:
stash@{0}: WIP on main: 2fba62e first commit
stash@{1}: WIP on main: 2fba62e first commit
這些消息不是很有用,但是您可以通過在存儲(chǔ)時(shí)添加自定義消息來為自己留下一些線索:
git stash push -m "third"
當(dāng)您現(xiàn)在列出時(shí),您會(huì)看到您的自定義消息:
stash@{0}: On main: third
stash@{1}: WIP on main: 2fba62e first commit
顯示記錄變更的差異
要找出存儲(chǔ)中發(fā)生的變化,請(qǐng)使用 git stash show。如果沒有進(jìn)一步的參數(shù),它將顯示最新存儲(chǔ)的差異摘要,如下所示:
$ git stash show
README.md | 3 +++
1 file changed, 3 insertions(+)
您還可以傳遞存儲(chǔ) id 來查詢特定條目:
git stash show stash@{0}
從 Stash 創(chuàng)建一個(gè)分支
您可能會(huì)認(rèn)為存儲(chǔ)中的更改非常重要,以至于它們應(yīng)該放在自己的分支中。如果是這樣,請(qǐng)使用分支命令從存儲(chǔ)中創(chuàng)建一個(gè)新分支:
git stash branch
同樣,默認(rèn)情況下這將適用于最近的存儲(chǔ),但如果需要,您可以提供存儲(chǔ) id。Git 從存儲(chǔ)庫中的同一點(diǎn)創(chuàng)建新分支作為存儲(chǔ)。然后它將存儲(chǔ)中的更改應(yīng)用到您的工作副本。
清理 Stash
沒有“git unstash”命令。如果要?jiǎng)h除存儲(chǔ)條目,請(qǐng)使用 drop:
git stash drop
同樣,這默認(rèn)為最新的,但您可以提供一個(gè)存儲(chǔ) ID。如果您決定要擺脫 Stash 的所有內(nèi)容,請(qǐng)使用以下命令:
git stash clear
使用 git stash 進(jìn)行臨時(shí)輕量級(jí)提交
Git 存儲(chǔ)庫遠(yuǎn)沒有完整存儲(chǔ)庫強(qiáng)大。但是它們本身仍然提供許多有用的功能。如果您經(jīng)常發(fā)現(xiàn)自己需要在工作中切換分支,那就請(qǐng)使用 stashes。
Stashing 只是 git 的一小部分,它是一個(gè)提供很多東西的程序。