为什么git revert导致冲突?

时间:2017-05-15 02:09:26

标签: git

让我知道我在git log中有以下提交:

previous commits --> bug fix --> pep8 the whole file (head)

-----------------------------------------------------
commit abcdefg2
pep8 the whole file

commit abcdefg1
bug fix

现在我想通过运行来恢复pep8更改:

git revert abcdefg1

然后我遇到很多冲突......我想知道我做了什么?我不确定在revert,abcdefg1或abcdefg2中使用哪个提交?

2 个答案:

答案 0 :(得分:1)

以下是显示应用恢复提交后分支状态的图表:

branch: ... I -- A -- B -- C

此处提交Apep8 the whole fileB是错误修复,C是提交A的还原。但是,从功能上讲,还原提交A会使您的分支处于与以下相同的状态:

branch: ... I -- B

换句话说,在应用了还原提交之后,就好像你刚刚在早期的一些提交中放置了bug修复。最有可能的是,这导致了一些必须解决的冲突。您可以自己测试这个理论,或者只是接受在进行恢复时发生冲突是完全正常的。

答案 1 :(得分:1)

git revertgit cherry-pick是合并操作。

对于樱桃挑选,樱桃挑选的承诺的父母是基础,樱桃挑选的承诺是“他们的”小费,你的结账是“我们的”小费。

...B---C     git cherry-pick C

...H         with H the HEAD 

是以B为基础的合并,它将从B到C的变化合并为从B到H的变化。这可能需要一些安静的时间来欣赏,值得花钱。

Revert恰恰相反:

...T---R    git revert R

...H        with H the HEAD

将R到T的变化与从R到H的变化合并。