Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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
cherry picks生成的Git冲突_Git_Merge_Git Merge_Git Cherry Pick - Fatal编程技术网

cherry picks生成的Git冲突

cherry picks生成的Git冲突,git,merge,git-merge,git-cherry-pick,Git,Merge,Git Merge,Git Cherry Pick,首先,我是git新手,但一直在讨论和(我将在后面的帖子中提到后一个问题)等类似的问题 摘要:我正在从一个分支到另一个分支进行提交,在对一个分支进行提交,然后尝试将它们合并到一起后,我收到了冲突。请看下面我的答案,了解我的想法 场景:我有两个文件,一个在“主”分支上,另一个在“辅助”分支上。“secondary”分支包含一些我们不想在master中使用的文件,并且只供少数人使用,但是“master”和“secondary”中的大多数文件都应该是一致的(master中的所有文件都在secondary

首先,我是git新手,但一直在讨论和(我将在后面的帖子中提到后一个问题)等类似的问题

摘要:我正在从一个分支到另一个分支进行提交,在对一个分支进行提交,然后尝试将它们合并到一起后,我收到了冲突。请看下面我的答案,了解我的想法

场景:我有两个文件,一个在“主”分支上,另一个在“辅助”分支上。“secondary”分支包含一些我们不想在master中使用的文件,并且只供少数人使用,但是“master”和“secondary”中的大多数文件都应该是一致的(master中的所有文件都在secondary中,但secondary中的所有文件都不在master中)。为了实现这一点,我一直在提交在“master”中所做的更改,使用
git checkout secondary
签出我的“secondary”分支,然后运行
git merge master
。不幸的是,我曾经提出过一个冲突,现在我的大脑正在快速运转,试图找出冲突是什么

尝试解决方案:起初,我认为这是因为我修改了“secondary”和“master”中的文件。为了解决这个问题,我使用了
git cherry pick[commit]
将我在次要分支中所做的更改拉到主分支中。但是,我仍然无法将主分支合并到次分支。Git建议使用
Git-add/rm
(大概是
Git-add
Git-rm
,尽管我花了一点时间才弄清楚)来标记我想要的。因此,我删除了索引中的版本,并使用“secondary”中的工作树。在此之后,我返回到我的“主”分支,重新提交我想要合并到“次要”的文件,返回到“次要”,然后再次运行
git merge master
。令我懊恼的是,冲突

问题:坦白说,我想我不知道发生了什么。我认为,
git merge master
(在辅助分支上运行时)将接受git master提交中所做的所有更改,并将这些更改放在辅助分支中。如果是这样的话,我不理解这个问题。我已从辅助文件中删除文件,并已在主文件中提交我的更改。为什么我不能合并?我前面提到的后一个问题的解决方案表明,这可能是因为共同祖先包含其他内容,但我认为
git cherry pick[commit]
会解决这个问题。问题在于
cherry-pick
不会创建新的合并基,因此即使在
cherry-pick
之后出现问题的文件是相同的,它们可能仍然与合并基不同

对于这个问题的长度,我深表歉意,我非常努力地去理解,感觉自己好像在兜圈子。任何建议都很好


编辑:我想我也很困惑,因为我不明白为什么git不让我更改分支来尝试解决这个问题。当我现在尝试
git checkout secondary
并可能
cherry pick
将提交更改为secondary时,我得到
错误:您需要首先解析当前索引。我想git不允许这种行为肯定是有原因的,我只是不确定我看到了什么。

首先是最后一点——你的回购处于不稳定状态。您可以手动编辑冲突,也可以

我认为一个或多个提交到master,您包括仅存在于master上的文件。Git无法合并这些提交,因为它们包含对不存在的文件的更改


尝试“git状态”查看您当前的位置;查找“两个已修改”文件。然后使用“git rm”将文件从合并中取出,或者您可以解决文件中的问题(冲突),并使用“git add”将其添加回提交。然后“git commit”完成合并。

找到了解决方案!所发生的事情是,
cherry pick
没有创建新的合并基础(因此它们都有一个共同的祖先,但它与它们当前的状态不同)。因此,当我在
樱桃选择之后修改master时,我的三个文件都是不同的。要可视化:

共同祖先:
File.txt:这是共同的祖先。

然后我在第二个分支上进行更改,并提交它们

次要:
File.txt:现在我把这个文件修改成这个

然后我
git checkout master
git cherry pick[commit make on secondary]

主机:
File.txt:现在我把这个文件修改成这个

但是,公共祖先仍然是
File.txt:这是公共祖先。
如果我对master进行了提交,将其更改为
File.txt:现在这是新的master,我会有三个不同版本的
File.txt
!因此,当我尝试合并时,git抱怨冲突,因为它不确定如何合并这两个不同的文件。要解决此问题,只需在主控模式下,在
樱桃拾取之后直接运行
git merge secondary
!如果我们现在进行合并,我们会得到:

共同祖先:
File.txt:现在我把这个文件修改成这个


这似乎不直观,因为主服务器和辅助服务器之间的合并实际上对它们的文件没有任何作用,因为它们在这一点上是相同的。然而,在对任何一个分支进行任何更改之前,都有必要进行此合并以创建一个共同的祖先。希望这对别人有帮助

谢谢!我想这让我开始了,但我仍然不明白为什么问题会首先出现。因此,我将一些文件提交给第二个分支,然后cherry选择了提交I