Git三向合并:在第一个分支中更改一行,&不在第二分支。为什么更改的行胜过未改变的行?

时间:2015-04-30 03:26:44

标签: git

我正在阅读Pro Git。当老板告诉你那里有一个关于主人的危机时,你正在研究名为issue53的分支机构 - 这是一个错字。你提交issue53,检查master,创建一个新的修补程序分支,修复拼写错误,然后将它合并回master。

然后返回问题53并继续工作。当你完成后,你将三方合并回主人,目标是消除issue53分支。

来自master的拼写错误修复现在在合并结果中生效。

我的问题是:Git如何知道master中的固定拼写错误(单行更改)是#34;更重要的"问题53中的 -fix?我认为应该问哪个版本胜过另一个版本(创建冲突解决标记:解析标记"<<<<<< ...")。

2 个答案:

答案 0 :(得分:1)

我想这种改变优先于现状。即如果一个版本的行已更改,而另一个版本不执行任何操作,则结果是更改。我会说这是三方合并的主要原则。

只有在以某种方式更改两个版本时才会进行手动冲突解决。

为了测试这个,我创建了一个包含一个简单文件的存储库,并创建了两个分支。我在两个分支中编辑了一些行,然后将这些变化合并在一起。这是打开差异分辨率工具时的结果:

conflict in KDiff3

正如您所看到的,只有一个版本被更改的地方自动解决(并且更改优先),触发手动解决的唯一地方是两个分支中更改的最后一行。

答案 1 :(得分:0)

在进一步阅读之后,我目前的理解是:

由于resolution strategy Git使用(在该页面上向下滚动一下),当前检出的版本(this:master)胜过另一个版本(即:issue53)。