在这种特殊情况下,为什么我会在git revert之后出现冲突

时间:2018-02-17 07:39:25

标签: git

我的文件在开头看起来像这样

asd
bnm
cvb

然后我添加了三个提交:

1

asd feature1 c1
bnm
cvb

2

asd feature1 c1
bnm feature1 c2
cvb

3

asd feature1 c1
bnm feature1 c2
cvb feature1 c3

现在,当我想通过执行

来恢复第二次提交时
git revert HEAD^

我收到类似这样的错误消息

error: could not revert 2222222... feature 1 commit 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我的文件看起来像这样

<<<<<<< HEAD
bnm feature1 c2
cvb feature1 c3
=======
bnm
cvb
\>>>>>>> parent of 2222222... feature 1 commit 2

我只是不明白为什么。我的假设是它会像Edwar Thomson在回答这个问题时解释的那样: git revert: Why do I get conflicts? 我没有两次编辑第2行,不应该发生冲突。我错过了什么?

我希望结果是

asd feature1 c1
bnm
cvb feature1 c3

没有任何冲突。

1 个答案:

答案 0 :(得分:1)

这里缺少的是,像樱桃一样的回复只是应用补丁(这里是过去提交的负面图像)。
它没有合并。

这意味着,正如我在“Git cherry-pick causes merge conflict while merging does not”中描述的那样,它没有共同祖先的概念。

问题是由git revert计算的补丁的上下文:请参阅“Conflicts from apply and stash”。

还原(2和1之间的负差异)尝试取消第2行(在第三行bnm feature1 c2之前将bnm还原为cvb一个HEAD内容, cvb作为第三行 在应用该补丁时,Git不知道如何处理第三行:应该不管它,还是将其修改为cvb

请参阅“Why does this cherry-pick have a conflict?”中的另一个示例。