樱桃产生的Git冲突

首先,我是git的新手,但一直在讨论关于这个和这个主题的文档和类似问题(我将在稍后的帖子中提到后一个问题)。

总结:我正在挑选一个分支到另一个分支,然后在一个分支上进行提交,然后尝试将它们合并到一起,我正在接受冲突。 请参阅下面的答案,了解我的想法。

场景:我有两个文件,一个在“主”分支,另一个在“次要”分支。 “secondary”分支包含一些我们不想在master中使用的文件,并且只有少数人使用,但是我们在“master”和“secondary”中的大多数文件应该是一致的(master中的所有内容都是在中学,但所有中学都不在主)。 为了实现这一点,我一直在提交“master”中所做的更改,使用git checkout secondary检出我的“secondary”分支,然后运行git merge master 。 不幸的是,我曾经提出过一次冲突,现在我的大脑正在努力弄清楚冲突是什么。

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

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

我对这个问题的长度表示歉意,我想超级难以理解,并且觉得我在圈子里跑步。 任何建议都会很棒。

编辑:我想我也很困惑,因为我不明白为什么git不会让我改变分支来尝试解决这个问题。 当我现在尝试使用git checkout secondary来尝试或者cherry-pick提交更改为辅助时,我得到error: you need to resolve your current index first 。 我假设git不会允许这种行为,我只是不确定我看到它是什么。


最后一点 - 你的回购处于一个缓慢的状态。 您可以手动编辑冲突并完成合并提交,也可以退出合并提交

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

尝试'git status'来查看你目前的位置; 寻找“两个修改过的”文件。 然后'git rm'将文件从合并文件中取出,或者您可以解决文件中的问题(冲突)并将它们添加回'git add'提交。 然后'git commit'完成合并。


找到解决方案! 什么情况是, cherry-pick 不会创建一个新的合并基础(所以他们都有着共同的祖先,但它比这两个其当前状态的不同)。 因此,当我在cherry-pick后修改主人时,我的所有三个文件都不同。 想象:

Common Ancestor: File.txt: this is the common ancestor.

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

次要的: File.txt: now I've modified this file to be this!

然后我把git checkout mastergit cherry-pick [commit made on secondary]

主: File.txt: now I've modified this file to be this!

然而,共同的祖先仍然是File.txt: this is the common ancestor. 如果我对master进行提交,将其更改为File.txt: now this is the new master! ,我会有三个不同版本的File.txt ! 因此,当我尝试合并时,git抱怨冲突,因为它不知道如何组合这两个不同的文件。 为了解决这个问题,只需在主控制器上进行cherry-pick直接运行git merge secondary ! 所以如果我们现在合并,我们会得到:

Common Ancestor: File.txt: now I've modified this file to be this!

这看起来并不直观,因为主控和辅助之间的合并实际上没有对他们的文件做任何事情,因为它们在这一点上是相同的。 但是,在我们对任一分支做出更改之前,有必要进行合并以创建共同的祖先。 希望这可以帮助别人!

链接地址: http://www.djcxy.com/p/41723.html

上一篇: Git conflicts generated by cherry

下一篇: git reset HEAD before checking merge changes