如何中止取消暂存 (stash pop)?

9 浏览
0 Comments

如何中止取消暂存 (stash pop)?

我在执行stash操作时遇到了合并冲突。与被标记为重复的问题不同,我在目录中已经有一些未提交的更改,我希望保留这些更改。我不仅希望消除合并冲突,还希望将目录恢复到pop之前的状态。

我尝试了git merge --abort,但git声称没有进行中的合并。有没有一种简单的方法可以中止pop操作而不破坏我最初在目录中所做的更改?

0
0 Comments

如何中止一个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

不要这样做,否则你将失去目录中的所有未提交更改。误导性的赞!!!

0
0 Comments

如何中止一个 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 过程中发生了合并冲突,可能会导致问题。请继续阅读以获取更好的解决方法。

0
0 Comments

在使用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命令无法成功执行的问题。

0