还原具有合并冲突的 git 合并,这些合并冲突已在合并期间解决并已推送到远程

Reverting a git merge that had merge conflicts which were resolved during the merge and which has been pushed to the remote

我有一个 master 分支,其中有一个文件 Demo.txt。它有以下两行:

AAAAAA
BBBBBB

此时从 master 分支出一个新的分支 Dev。分支 Dev 现在包含具有相同 2 行的 Demo.txt 即

AAAAAA
BBBBBB

假设我结帐 master 并向 Demo.txt 添加新行,以便文件变为:

AAAAAA
BBBBBB
XXXXXX

同样,然后我检查 Dev 并向 Demo.txt 添加新行,以便文件变为:

AAAAAA
BBBBBB
YYYYYY

现在我检查 master 并将 Dev 合并到其中。第 3 行的文件 Demo.txt 存在合并冲突。让我们假设通过保留 master 和 Dev 分支的条目来解决冲突。让我们假设新的合并文件看起来像:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

现在我提交合并并将其推送到远程存储库。让我们假设合并的提交 ID 类似于 abcdef056fg(仅作为示例)。推送合并后,我发现在解决合并冲突时出现了一些错误,我想回滚 merge.Also,我想在将 Dev 合并到 master 之前将其作为错误修复的一部分再添加一个更改again.According 根据 Linus Torvalds 在 link 中给出的指南 - “https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt”,我还原了合并 abcdef056fg 的还原。例如, 我检查 master,做 "revert -m 1 abcdef056fg" 这给了我一个新的 commit.I 再次恢复提交以获得恢复的恢复。还原合并的还原给了我以下 Demo.txt:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

然后我检查 Dev 并使用以下行向其中添加一个新文件 Demo2.txt;

PPPPPP

我现在检查 master 并再次合并 Dev。新文件 Demo2.txt 已正确合并到 master 中。但是我没有再次选择解决 Demo.txt 的合并冲突的选项。假设我希望合并冲突再次出现在 Demo.txt 中,以便我可以将其更改为以下内容:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

而不是

AAAAAA
BBBBBB
XXXXXX
YYYYYY

我该怎么做。我不想直接在我的 master 上进行更改,因为我保持 master 分支干净并且不对其进行任何开发。所有开发都在 Dev 分支完成,最后测试并合并到 master 中。这也是一个人为的例子,只有一个冲突。任何此类合并都可能有几个已解决和提交的冲突,我不想在 master 中修复所有这些冲突。那我该怎么做呢?

我发现这个question.The答案的答案在于,上面的合并有一个明显的错误out.I提到我的意图是始终保留主分支干净,没有开发,但我在第一个 merge.This 矛盾之前将第 3 行 XXXXXX 添加到 master 中的 Demo.txt。现在已经添加了 XXXXXX,我应该先将 master 合并到 Dev 中,然后再将 Dev 合并回 master.Doing 之前会在 Demo.txt 中给出合并冲突,这将根据要求解决如下:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

如果我然后合并回 master 中,它将与 Demo.txt 在 master 中直接合并为:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

现在还原 master 中的还原会保持 Demo.txt 与上面相同。 现在,如果我检查 Dev 的错误修复(除了添加 Demo2.txt)并修复 Demo.txt 如下:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

并再次检查 master 并将 Dev 合并到 master,git 将在 master 中使用以下四行修复 Demo.txt 而不会出现合并冲突:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

这就解决了我们的目的。

不删除问题,因为这可能是一些有用的分析。