放弃 Git Stash Pop

145

我执行了git stash pop,现在有很多冲突。在执行git stash pop前我已经提交过所有最近的代码了,那么有没有一种方法可以回到上一个提交状态并且消除掉所有由git stash pop引入的冲突和代码呢?


1
你还想保存弹出的工作吗,还是永远不想再看到它? - jscs
2
不,我不想要 Popped 的工作。我大约 4 个月前做了 stash,甚至不确定里面有什么? - jdog
2
你关心在进行存储操作之前未提交的事项吗? - Andrew Marshall
四个月前的还是今天的?我想要一个小时前的。 - jdog
可能是回滚到以前的Git提交的重复问题。 - simont
7
如果在使用 git stash 命令时发生冲突,Git 将不会将这个储藏从列表中删除。因此,运行 git reset --hard HEAD 命令不会销毁弹出的工作。 - jwadsack
3个回答

201

这个问题已经在stackoverflow上得到了回答(参见如何将Git仓库还原到以前的提交?),但简单答案是:

git reset --hard HEAD

这应该解决你的问题。请注意,这将从存储库中删除所有未提交的更改。

请注意,如果存在冲突,则保留存储。来自存储文档

应用状态可能会因冲突而失败;在这种情况下,它不会从存储清单中删除。您需要手动解决冲突,然后再手动调用git stash drop


1
这将使您的本地仓库回滚到上一个提交。您应该能够轻松推送所有自上次推送以来的提交。如果不起作用,请将结果发布回您之前的问题中。祝你好运。 - MichaelMilom
32
但这会导致您的隐藏物丢失。 - K. Weber
23
如果git stash pop引起冲突,那么这个储藏的内容将不会从储藏列表中删除。 - Daiwei
3
我不确定是谁给“实际上你不会失去你的物品”点赞的,我刚刚失去了我的东西。 - Anthony
7
个人认为这不是一个很好的解决方案,因为它指出你将会丢失未提交的更改。 - Ivan P
显示剩余4条评论

6

重置同样可以针对特定文件进行调用:

git reset HEAD <filename>...

您无法对文件进行硬重置。但是,您可以在之后使用checkout撤销更改:
git checkout -- <filename>...

正如MichaelMilom的回答中Luke所指出的那样,您的存储库将被保留。

当您不想丢失未提交的本地更改时,这非常有用。


0

如果你不希望再看到弹出的存储区中的工作,那么最简单的方法就是硬重置:

git reset --hard HEAD

这告诉 Git 忽略你的工作目录中未提交的更改,并将工作目录、暂存区和 HEAD 设置为你指定的提交 -- 在这种情况下,是包含你刚刚提交的所有工作的现有 HEAD。


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