我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
当前回答
简单的一行
我总是用
Git重置—合并
我不记得它曾经失败过。
注意:git重置——合并将丢弃任何阶段性更改。此外,正如@Saroopashree Kumaraguru在评论中指出的那样,隐藏的内容不会丢失,以后可以重新应用。
其他回答
我的用例:只是尝试弹出到错误的分支并得到冲突。我所需要的是撤消弹出,但保持它在收藏列表,以便我可以弹出它在正确的分支。我是这样做的:
git reset HEAD --hard
git checkout my_correct_branch
git stash pop
一件容易的事。
我可以在“脏”目录上重新生成干净的git stash pop,具有未提交的更改,但尚未生成合并冲突的pop。
如果在合并冲突中,你试图应用的stash没有消失,你可以尝试检查git show stash@{0}(可选与-ours或-their),并与git statis和git diff HEAD进行比较。您应该能够看到哪些更改来自应用存储。
如果你只有存储的更改,试试下面的一行。它删除了当前的每个局部更改。
Git checkout -f
一些想法:
使用git mergetool将合并文件拆分为原始部分和新部分。希望其中一个是包含你非隐藏更改的文件。 反向应用隐藏的diff来撤销这些更改。您可能必须手动分离合并冲突的文件(希望上面的技巧可以奏效)。
这两个我都没有测试过,所以我不确定它们是否能工作。
我用不同的方法解决了这个问题。事情是这样的。
首先,我碰到了错误的分支,产生了冲突。存储仍然完好无损,但是索引在冲突解决中,阻塞了许多命令。
简单的git重置HEAD会中止冲突解决,并留下未提交(和不需要的)更改。
几个git co <filename>将索引恢复到初始状态。最后,我用git co <branch-name>切换了分支,并运行了一个新的git stash pop,解决了没有冲突的问题。