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