Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 为什么cherry pick在提交未触及的行中显示冲突?_Git_Egit - Fatal编程技术网

Git 为什么cherry pick在提交未触及的行中显示冲突?

Git 为什么cherry pick在提交未触及的行中显示冲突?,git,egit,Git,Egit,当我第一次读到关于git cherry pick时,我认为它是将提交引入的更改作为补丁应用到新提交中的HEAD。我最初的几次使用符合这种看法 后来,我尝试从一个分支中挑选一个非常简单的提交: git cherry-pick ab797f0c 令我惊讶的是,我在几行中遇到了冲突,而这些冲突并没有被提交所触及!!!提交非常简单,在一个文件中更改了2行 我尝试了EGit,它显示了一个注释:“EGit使用交互式重基机制进行樱桃采摘,这与常规Git不同……”但我遇到了相同或类似的冲突 我试过: git

当我第一次读到关于
git cherry pick
时,我认为它是将提交引入的更改作为补丁应用到新提交中的
HEAD
。我最初的几次使用符合这种看法

后来,我尝试从一个分支中挑选一个非常简单的提交:

git cherry-pick ab797f0c
令我惊讶的是,我在几行中遇到了冲突,而这些冲突并没有被提交所触及!!!提交非常简单,在一个文件中更改了2行

我尝试了EGit,它显示了一个注释:“EGit使用交互式重基机制进行樱桃采摘,这与常规Git不同……”但我遇到了相同或类似的冲突

我试过:

git diff ab797f0c^ ab797f0c |patch -p1
它工作得很好,处理了大块的偏移量

为什么git/EGit在选择可由
补丁程序轻松应用的提交时遇到问题?
cherry pick在git中是如何工作的,在EGit中又有什么不同

更新:

根据Andrew的建议,我试图将问题简化为一个简单的存储库。这是:

我正在进行
测试
并试图挑选
cherry
git cherry pick cherry
产生大量与提交无关的冲突,而
git diff cherry^cherry | patch-p1
工作正常

EGit与git给出了类似的冲突

更新2:

我的简化示例存储库似乎只显示了EGit的问题。git在挑选的一个提交对象中显示了冲突,这是意料之中的


我将尝试在一个简单的存储库中复制git的问题。我遇到的问题是,我正在提交并尝试cherry pick

这是因为
git cherry pick
正在引擎盖下执行一个3向合并,而提交C正在修改与提交B相同的区域。diff技术起作用,因为补丁默认情况下会忽略最多2行上下文,其中as
git cherry pick
没有。如果您再次尝试使用
补丁-p1-F0
,补丁也将无法应用它

在这种情况下,diff技巧可能有效,甚至可能正确地完成了您想要的操作,但并非在所有情况下都有效
git cherry pick
采取了更务实的方法,提醒您该领域的变化,让您决定如何将这些变化结合起来。根据情况,不同的差异化算法可以减少冲突(或使冲突更有意义)。您可以通过使用
-X
选项(例如
-Xpatience
使用耐心算法)来实现这一点。但在这种特殊情况下,这些都不起作用


所有这些都表明,如果你发现自己经常挑刺,并且经常以同样的冲突告终,你可以成为你的朋友。您可以使用git config--global reere.enabled来全局启用它。它将记录您做出的决议,如果您再次遇到,它将自动应用该决议。樱桃选择仍然会在应用之前的解决方案后停止,但这是一个快速回顾和一个
--继续
,以确保它做了正确的事情。

您可能需要将问题减少到测试存储库,并将其发布到github上。我天真地猜测他们都在调用
格式补丁
,但根据传入的选项,它的行为有各种微妙之处。@AndrewC,我根据您的建议更新了答案。请注意,EGit目前(从3.5版开始)在cherry pick中也有一些错误,请参阅。