提交后重新处理不良的git冲突解决方案

10
我想重新创建合并冲突,以便第二次正确解决它。
例如:
  • 检出分支 'A'。
  • 将分支 'B' 合并进来。
  • 解决合并时的冲突(创建合并提交)。
  • 推送到远程。
  • 其他人将其合并到分支 'A',并将其推送到远程。
  • 哦,糟糕了,我意识到我的冲突解决方法是错误的,我选择了他们的解决方案,而不是我的。
  • 现在怎么办?
我主要想重新进行“冲突解决”这一步骤。
我无法将我的 HEAD 重置为之前的状态,因为该分支已经被推送到远程;而且有其他人在我发现冲突解决错误之前就对其进行了提交。
我也想避免直接在分支 'A' 上进行修复。
我想避免使用 cherry-pick。我知道我可以执行标准的还原操作并挑选我的提交等,但我不想这样做。
所以是否有任何优雅的方式来解决这个问题?
我尝试过还原合并提交,然后再还原还原,并再次合并分支 'B',但不幸的是它不会再次要求我解决任何冲突,我只会收到“已经是最新版”的消息。
简而言之,我想重新创建合并冲突,以便第二次正确解决它。
非常感谢您的帮助。

我会放弃尝试将其作为合并或还原操作,并仅使用修复后的直接提交到 A 分支。 - Schwern
请参见https://superuser.com/questions/691494/is-there-a-way-to-redo-a-merge-in-git/691497,其中有一个更好的答案。 - Robin Green
1个回答

13

这里有两个步骤。第一步是重新创建合并和冲突。第二步是将其应用于分支的新末尾。

你会得到类似这样的东西。

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发生了更改,您可能会遇到新的冲突。这没关系,请按照通常的方式解决它们并提交。


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