【问题标题】:Redo bad git conflict resolution after push推送后重做糟糕的 git 冲突解决方案
【发布时间】:2017-08-17 20:22:27
【问题描述】:

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

例子:

  • 分支“A”已签出。
  • 分支“B”已合并。
  • 从合并中解决的冲突(创建合并提交)。
  • 推送到远程。
  • 其他人合并到分支“A”并推送到远程。
  • 哦,天哪,我意识到我的冲突解决方案是错误的,我选择了他们而不是我的,无论如何。
  • 现在呢?

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

我没有重新设置我的 HEAD 的选项,因为分支已经被推送到远程;并且有可能在我意识到解决冲突是错误的之前,其他人已经做出了承诺。

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

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

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

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

简单地说,我想重新创建我的冲突,以便第二次正确解决它。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 我不会尝试将其作为合并或还原来执行,而是直接提交到分支 A 并进行修复。
  • 查看superuser.com/questions/691494/…,IMO 有更好的答案

标签: git git-revert git-merge-conflict


【解决方案1】:

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

你有这样的东西。

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。这会将差异保存在名为"the stash" 的角落中。这只是一种更正式的保存补丁的方式。

现在我们已经解决了本来会发生的冲突,检查 A 并从存储中应用修复。

git checkout A
git stash pop

由于 A 发生了变化,您可能会因此而产生新的冲突。没关系。正常解决它们并提交。

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多