如何中止取消暂存 (stash pop)?
如何中止一个stash pop?
在这个例子中,我尝试将stash pop到错误的分支上并产生了冲突。我只需要撤销pop操作,但仍然保留它在stash列表中,以便在正确的分支上pop出来。我执行了以下操作:
git reset HEAD --hard git checkout my_correct_branch git stash pop
很简单。
所以你想要的stash会一直保留在stash列表中,直到你成功pop出来?
这不是对原问题的回答,因为它会清除未提交的本地更改。请参考下面的DavidG的回答。基本上,是的,它会保留在stash列表中。
我认为绝大多数遇到这种情况的用户会认为这个解决方案是理想的。我无法想象在尝试将stash pop到工作目录之前,我会有未提交的更改。那听起来像是一场灾难。
好的。在阅读了这个回答后,我查看了git stash pop的文档,它说:“应用状态可能因冲突而失败;在这种情况下,它不会从stash列表中移除。”所以,这就是为什么在reset/checkout之后可以再次pop出stash的原因。
清除所有你想保留的本地更改。很简单。XD
不要这样做,否则你将失去目录中的所有未提交更改。误导性的赞!!!
如何中止一个 stash pop?
出现原因:原始的 stash pop 操作失败,可能是因为在 stash apply 过程中发生了合并冲突。
解决方法:
1. 将当前所有更改推送到索引中:git add -u
2. 反转之前由 git stash apply 执行的 merge 操作:git merge-recursive stash@{0}: -- $(git write-tree) stash@{0}^1
3. 现在只剩下非 stash 更改,并且它们位于索引中。如果需要,可以使用 git reset 来取消暂存更改。
4. 如果原始的 git stash apply 失败,那么反转操作可能也会失败,因为一些需要撤销的操作没有被执行。
5. 确认操作后,工作副本将恢复到干净状态。
注意:执行上述操作不会永久丢失之前的 stash 编辑,它们仍然存在于 stash 中。
如果原始的 stash pop 过程中发生了合并冲突,可能会导致问题。请继续阅读以获取更好的解决方法。
在使用git stash pop命令时,如果出现合并冲突导致无法成功执行命令,可以使用git reset --merge命令来解决该问题。这条命令将放弃所有已暂存的更改,并将之前存储在stash中的内容放回stash中,而不会丢失任何内容。与此同时,git merge --abort命令在这种情况下无法解决问题。使用git reset --keep命令也无法解决该问题,会出现"fatal: Cannot do a keep reset in the middle of a merge."的错误。因此,推荐使用git reset --merge命令来解决git stash pop命令无法成功执行的问题。