Git 有一个区域叫作“存储区”,你可以在其中临时存储所做更新的快照,而无需将更新提交到存储库。它是跟工作目录、暂存区或仓库分开的。
当你对尚未准备提交的分支进行了更改,但需要切换到另一个分支时,这个功能很有用。
存储更新
要将你的更新保存在存储区,需要运行以下命令:
git stash save "optional message for yourself"
这样可以保存你的更新,并将工作目录还原为最新拉取的样子。可以从该仓库中的任何分支获取存储的更新。
请注意,要存储的更新需要在跟踪的文件上。如果你创建了一个新文件并尝试隐藏更新,则可能会收到错误提醒:No local changes to save
(没有可保存的本地更新)。
查看存储的更新
运行以下命令,查看存储区的内容:
git stash list
这将以 stash@{0}: BRANCH-STASHED-CHANGES-ARE-FOR: MESSAGE
格式返回你已保存的快照的列表。stash@{0}
部分是该存储区的名称,大括号({ }
)中的数字是该 stash 的索引。如果存放了多个变更组,则每个变更组都有一个不同的索引。
如果你忘记了 stash 中有哪些更新,则可以使用 git stash show NAME-OF-STASH
来查看它们的摘要。如果你想查看典型的 diff-style(使用 +、- 逐行罗列出更新),则可以使用 -p
选项。这是一个例子:
git stash show -p stash@{0}
# Example result:
diff --git a/PathToFile/fileA b/PathToFile/fileA
index 2417dd9..b2c9092 100644
--- a/PathToFile/fileA
+++ b/PathToFile/fileA
@@ -1,4 +1,4 @@
-What this line looks like on branch
+What this line looks like with stashed changes
检索存储的更新
要从存储中检索更新,并将其应用到你所在的当前分支,你有两个选择:
git stash apply STASH-NAME
将同步更新,并将副本保留在 stash 中git stash pop STASH-NAME
将同步更新,并从 stash 中删除文件
同步更新时可能会发生冲突。你可以 resolve 冲突,类似于 merge(查看更多关于 git merge
的信息)。
删除存储的更新
如果你要删除存储的更改,而不应用它们,请运行以下命令:
git stash drop STASH-NAME
要清除整个 stash,请运行以下命令:
git stash clear
原文:Git Stash Explained: How to Temporarily Store Local Changes in Git