推送后重做错误的 git 冲突解决



我想重新创建合并冲突,以便我可以第二次正确解决它。

例:

  • 分支"A"已签出。
  • 分支"B"合并到。
  • 通过合并解决的冲突(创建合并提交)。
  • 推送到远程。
  • 其他人合并到分支"A"并推送到远程。
  • 哦,亲爱的,我已经意识到我的冲突解决方案是错误的,我选择了他们的而不是我的,无论如何。
  • 现在怎么办?

我基本上想重做冲突解决部分

我无法选择重新设置我的HEAD,因为分支已经被推到遥控器上;并且在我意识到冲突解决是错误的之前,其他人有可能已经承诺了。

我还想避免直接修复分支"A"。

我想避免采摘樱桃。我知道我可以做一个标准的恢复和挑选我的提交等,我不想这样做。

那么有什么优雅的方法可以做到这一点吗?

我尝试恢复合并提交,然后恢复并再次合并分支"B",但不幸的是,它没有要求我第二次解决任何冲突,我只是收到标准的"已经是最新的"消息。

简而言之,我想重新创建我的冲突,以便我可以第二次正确解决它。

任何帮助将不胜感激。

谢谢。

这里有两个步骤。首先是重新创建合并和冲突。第二种是将其应用于分支的新尖端。

你有这样的东西。

1 - 2 - 5 - 6 - 7 - 9 - 10 [A]
         /
3 - 4 - 8

7 是合并提交,您希望重做并在 A 之上应用修复程序.变基可能会变得混乱,因为上面堆积了太多工作。

首先,让我们重新创建合并冲突。为此,我们将重新做一遍。结帐 6,那是 A 合并时的位置,并将其与 8 合并。

git checkout 6
git merge 8

必须使用git log --graph来确定实际的提交 ID。现在我们有了合并冲突。像你一样解决它,但不要提交它。相反,把它藏起来。git stash save.这会将差异保存在称为"藏匿处"的角落中。这只是保存补丁的一种更正式的方式。

现在我们已经有了本来会发生的冲突解决方案,签出 A 并从仓库应用修复程序。

git checkout A
git stash pop

由于 A 发生了变化,您可能会从中获得新的冲突。没关系。正常解决它们并提交。

最新更新