git cherry pick合并冲突拉入其他提交?

git cherry pick合并冲突拉入其他提交?,git,cherry-pick,merge-conflict-resolution,Git,Cherry Pick,Merge Conflict Resolution,出于某种原因,当flies发生合并冲突时,git cherry pick似乎会拉入其他提交。当我们使用git mergetool时,这些问题就会消失,但会阻止我们手动编辑合并冲突的文件 有人知道为什么会这样吗 为了说明我的意思,让我们使用一个新的Git 1.7.4存储库,其中只有一个文件:代码> Foo: header footer header <<<<<<< HEAD ======= add something here add someth

出于某种原因,当flies发生合并冲突时,git cherry pick似乎会拉入其他提交。当我们使用
git mergetool
时,这些问题就会消失,但会阻止我们手动编辑合并冲突的文件

有人知道为什么会这样吗

为了说明我的意思,让我们使用一个新的Git 1.7.4存储库,其中只有一个文件:代码> Foo:

header

footer
header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer
让我们在这里创建一个名为
bar
的新分支。回到主控中,让我们在单独的提交中向该文件添加三个更改

承诺1:

header

+add something
+
footer
承诺2:

header

add something

+add something else
+
footer
承诺3:

header

add something

add something else

+important change!
+
footer
由于最后一次提交很重要,因此在我们决定将其拉回到该分支上的分支
bar
git cherry pick

不幸的是,这在文件
foo
中产生了一个有趣的合并冲突:

header

footer
header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer

为什么合并冲突文件包含的提交比我们试图挑选的文件早?

Git对此持怀疑态度,如果它没有找到补丁将应用到的正确边缘,它将不会进行合并。修补程序将应用于不存在的行号。检查提交的修补程序,并查看其应用于没有意义的行号。由于它是一个樱桃选择,它没有考虑文件是如何变成这样的,并且添加该条目是可以的。希望这是有意义的。

您对此有支持性的参考资料吗?我的问题似乎与此类似,您说过cherry pick“有效地为单个提交生成补丁”;这与我之前听到的关于cherry pick的说法是一致的。你上面的回答表明它比那更复杂,并不复杂。Git查看修补程序将应用到哪里,如果边缘不匹配,则视为冲突。如果合并,那么git会考虑文件是如何通过历史记录达到现在的状态的。