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

时间:2017-10-08 20:19:18

标签: git merge revert

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

AAAAAA
BBBBBB

此时,新的分支Dev从主服务器分支出来。分支Dev现在包含具有相同2行的Demo.txt,即

AAAAAA
BBBBBB

让我假设我结帐主人并在Demo.txt中添加一个新行,以便该文件成为:

AAAAAA
BBBBBB
XXXXXX

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

AAAAAA
BBBBBB
YYYYYY

现在我结帐主人并将Dev合并到其中。第3行中的文件Demo.txt存在合并冲突。让我们假设通过保留master和Dev分支的条目来解决冲突。让我们假设新的合并文件如下:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

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

AAAAAA
BBBBBB
XXXXXX
YYYYYY

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

PPPPPP

我现在结帐主人并再次合并Dev。新文件Demo2.txt正确合并到master中。但我没有选择再次解决Demo.txt的合并冲突。让我们假设我想在Demo.txt中再次显示合并冲突,以便我可以将其更改为以下内容:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

而不是

AAAAAA
BBBBBB
XXXXXX
YYYYYY

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

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的答案。答案在于上面的合并有一个明显的错误。我提到我的意图是保持主分支始终清洁,没有开发,但我在第一次合并之前,将第三行XXXXXX添加到master中的Demo.txt。这是一个矛盾。现在添加了XXXXXX,我应该首先将master合并到Dev中,然后再将Dev合并到master中。先前会在Demo.txt中给出合并冲突,这些冲突可以按照以下要求解决:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

如果我然后合并回主人那将是一个直接合并主人的Demo.txt剩余为:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

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

AAAAAA
BBBBBB
YYYYYY
XXXXXX

并再次检出master并将Dev合并为master,git会使用以下四行修复master中的Demo.txt而不会产生合并冲突:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

这解决了我们的目的。

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