当前位置:  开发笔记 > 运维 > 正文

为什么合并冲突会发生?

如何解决《为什么合并冲突会发生?》经验,为你挑选了1个好方法。

例如:

我有一个主分支.

我创建了一个文件file.txtMaster branch在其中写入,然后我提交了它.

我创建了一个名为另一个分支fix20,并修改的文字file.txtThis is fix20 branch.然后我承诺了.

我切换到主分支,然后我创建一个分支hotfix并切换到它.

我修改file.txt了文本This is the HotFix.之后我提交了更改.

现在我切换回主分支并将其与修补程序合并.文件(没有问题)将文本更改为This is the HotFix(它们基本上是合并的)).

现在我与fix20分支合并,我得到了合并冲突.它file.txt包含来自fix20分支的文本和我与HotFix合并后的文本.在这一点上,我应该打开一个编辑器并决定,应该留下什么,以及应该删除什么.

问题是:为什么合并冲突第二次发生?当我将主服务器与修补程序合并时,为什么我没有决定要留下哪些文本?当我与fix20分支合并时为什么没有合并文件(为什么文本不是像修补程序一样被替换)?为什么基本上这种冲突第二次发生而不是第一次?



1> Jan Krüger..:

这里的问题是你知道你的意图......但是Git没有.

这就是Git如何看待你所做的事情:你对同一行进行了两次独立的更改.当您合并第一个时,您的意图很明确:您希望更改成为master的一部分.由于你已经分支,所以master本身没有任何变化,因此没有问题:如果只有合并的一侧改变了它,Git总是可以直接合并一段代码.

当您尝试合并第二个更改时,不再是这样:通过合并第一个分支,您已经引入了与第二个分支中的更改不直接"兼容"的master更改.Git称之为:"分支机构已经分歧".Git不知道你是不是要保留你从第一个分支合并的东西,或者你要从第二个分支合并的东西.

在你的情况下,你很明显,因为第二个分支是同一个东西的更新修复...但许多合并涉及更复杂的代码更改,也许合并第二个分支的正确方法是结合来自的更改两个合并:通常,如果两个合并的更改触及相同的代码行,则两个都必须在其上留下标记.

示例原始代码:

send_request("bake cookies")

分支1:

send_request("bake cookies", additions: ["chocolate"])

分支2:

send_request("bake cookies", flour: "wheat")

合并这两者的正确方法可能不是逐字地取两条线之一,它可能更像是这样:

send_request("bake cookies", flour: "wheat", additions: ["chocolate"])

既然你比Git更了解你的代码的意图,Git永远不会在这种情况下做出自动决定.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有