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