我在合并 2 个分支时遇到问题。我有一个包含以下内容的 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="sk" xsi:noNamespaceSchemaLocation="language.xsd">
<topic name="topicName">
<section name="sectionName">
<pair key="key_1" state="0">value 1</pair>
<pair key="key_2" state="0">value 2</pair>
</section>
</topic>
</language>
那么下面的案例:
分支“master”仅在 xml 文件中将“状态”从“0”更改为“1”。IE
<?xml version="1.0" encoding="utf-8"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="sk" xsi:noNamespaceSchemaLocation="language.xsd">
<topic name="topicName">
<section name="sectionName">
<pair key="key_1" state="1">value 1</pair>
<pair key="key_2" state="1">value 2</pair>
</section>
</topic>
</language>
然后将更改提交并推送到中央存储库。
分支“测试”添加了一个新节点。IE :
<?xml version="1.0" encoding="utf-8"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="sk" xsi:noNamespaceSchemaLocation="language.xsd">
<topic name="topicName">
<section name="sectionName">
<pair key="key_1" state="0">value 1</pair>
<pair key="key_2" state="0">value 2</pair>
<pair key="key_3" state="0">value 3</pair>
</section>
</topic>
</language>
然后将更改提交并推送到中央存储库。
当我在“master”分支中合并“Test”分支时,我遇到了冲突。IE
[master] git pull origin Test
冲突的文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="sk" xsi:noNamespaceSchemaLocation="language.xsd">
<topic name="topicName">
<section name="sectionName">
<<<<<<< HEAD
<pair key="key_1" state="1">value 1</pair>
<pair key="key_2" state="1">value 2</pair>
=======
<pair key="key_1" state="0">value 1</pair>
<pair key="key_2" state="0">value 2</pair>
<pair key="key_3" state="0">value 3</pair>
>>>>>>> b872e7d1bbbe281482baefa73e322a34c475aa92
</section>
</topic>
</language>
我不明白为什么这些变化会导致冲突。我可以保证文件上没有其他更改,例如空格、制表符或新行。(我已经多次重现这种冲突)
当我使用合并工具打开冲突文件时,它显示没有冲突。它只显示更改,合并工具不会自动合并新行。(我使用 git 版本 1.7.10.4)
有人可以解释为什么会发生这种情况以及如何避免这种冲突。
提前致谢。
编辑:我正在寻找更好的合并工具来解决 git 冲突。我找到了kdiff3。当我执行命令时:
git mergetool --tool kdiff3 sk.xml
该工具没有显示,但它确实自动解决了冲突。我很高兴。
现在我的问题:
1. 为什么 git 不能这样做?
2. “kdiff3”可以通过trusted,那它解决冲突好不好?我手动检查了我发布的这种类型的冲突,它很好地解决了冲突。但是有没有可能,这个工具可能会不正确地自动合并文件?