撤销 git stash

594

我刚才在一个项目中进行了一次隐藏操作,但我还没有提交。有没有办法返回到隐藏前的状态?我该怎么做呢?我已经关闭了终端并关掉了电脑。我进行了一些研究,似乎没有办法做到这一点。


相关帖子请点击此处 - RBT
要澄清一下,因为我认为这对于新接触版本控制的人来说很令人困惑:储藏是对文件所做的更改。因此,如果您关闭了终端或关闭了系统,则它们不会对您的情况产生额外影响。您只需要在终端中到达相同的位置(在git存储库中),然后解决处理储藏的下一步。 - benc
3个回答

1118

你可以直接运行:

git stash pop

然后它将取消隐藏您的更改。

如果您想保留文件状态(已暂存 vs. 工作中),请使用

git stash apply --index

17
不完全是。它不会重置暂存目录中的内容,因此您将需要重新暂存所有内容(如果您刚刚执行了复杂的 git add -p,则可能会很麻烦)。 - Nick
对我没用。我收到了一个错误:mymodule/MyClass.java: 需要合并 - 无法刷新索引。避免手动合并正是我使用 git stash pop 的目的... - TanguyP
1
救了我的命。我以为所有的更改都消失了,需要重新做所有的事情。谢谢。 - Jackson
1
@theonlygusti 我不记得我的解决方案是什么了。当时我对Git还很陌生,我猜发生的事情是我隐藏了一些更改,然后进行了一些与隐藏更改冲突的更改,然后尝试执行git stash pop。在这种情况下,我认为手动解决冲突是唯一的方法,除非你愿意在执行git stash pop之前放弃较新的更改。 - TanguyP
谢谢。我第一次尝试使用Visual Studio的git功能,在项目结束时使用了stash。结果,项目不见了。而且在Visual Studio中没有git来弹出stash。幸好git stash pop拯救了我! - Sting
显示剩余3条评论

202

1
在“git stash list”之后,还可以使用“git stash show”,以完善这个出色的答案,并更好地确定要用什么替换n。结果发现我有一些已经被删除的文件中存储的内容! - JimLohse

23

这也将恢复暂存目录:

git stash apply --index

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