Git暂存两次

154

我需要快速切换git分支,因此运行了git stash,但由于其中一个文件需要编辑而再次运行了它。

所以我运行了git stash两次,现在准备回到编辑我的文件。我运行了git stash apply,但我并不确定我存储的所有文件都已经被还原,有没有什么办法可以检查一下?

当我运行git stash show时,只看到了我两次git stash中的最后一个。

是否有办法显示所有的git stashes


11
git stash list的意思是列出所有暂存的修改。如果你已经暂存了两次,那么需要执行两次 git stash pop 来恢复这些修改。 - Felix Kling
1
嗨,你修好了!你应该把它作为一个答案。非常感谢。 - stephenmurdoch
4个回答

246

您可以通过以下命令获取所有stash的列表:

git stash list

这将会展示给您类似以下的内容:
stash@{0}: WIP on dev: 1f6f8bb Commit message A
stash@{1}: WIP on master: 50cf63b Commit message B

如果您制作了两个存储库,则只需调用git stash pop两次。与git stash apply相反,pop应用并删除最新的存储库。
您还可以引用特定的存储库,例如:
git stash show stash@{1}

或者
git stash apply stash@{1}

32
如果你想执行两次 git stash pop,因为你希望两个暂存内容都在同一个提交中,但是在第二次执行 git stash pop 时遇到了 "error: Your local changes to the following files would be overwritten by merge:" 的错误提示,那么你可以按照以下步骤操作:1)执行 git stash pop;2)执行 git add .;3)再次执行 git stash pop - gabe
这对我很有帮助。我需要执行 "git stash",然后执行 "git stash --all" 来存储一些新的未跟踪文件。执行两次 git stash pop 没有起作用。我只得到了后面的存储。 - Leopold Kristjansson

12

我遇到了这种情况,我执行了两个stash操作,并使用 git stash pop 只取出了最后一个stash。因此我进行了以下操作:

git stash list

git stash pop stash@{1}

这个命令找回了我第一个藏匿区,我能够看到所有之前的更改!


6
您在帖子中提出了几个不同的问题,其他回答者对其中一些问题给出了很好的答案。但似乎最重要的问题还没有得到回答:

>>我并不确定我存储的所有文件都已经被取消存储了。有什么办法可以检查吗?

将存储与本地树进行比较

我认为您想要做的是将存储与您的本地工作树进行比较。您可以在存储命令上加上 -p 开关,就可以了:

git stash show -p

如果你想要特定的一个,只需使用它在stash列表中的git stash name或id:

git stash show -p stash@{3}

也许可以使用差异?

如果你真的对推动你的git技能感兴趣,你可以尝试一下差异(diff)。为了查看存储区和主分支HEAD中的差异,可以使用以下差异:

git diff stash@ master

另一个很有用的命令是 --stat,它可以显示存储历史中元素的更改情况。
git stash list --stat

但我认为简单的答案就是正确的答案。只需使用 -p 开关,你很可能会看到你存储的代码片段是否已经被还原。

git stash show -p stash@{3}

1
只是以防万一:
如果你在VSCode终端上尝试 `git stash apply stash@{1}`,可能会出现错误:未知开关 `e'`
你可以用引号来执行 `git stash apply 'stash@{1}'`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接