[英]Conflict when merging two branches with git
合並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”。 即
<?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>
更改將被提交並推送到中央存儲庫。
分支“ 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">
<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] 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-conflicts。 我找到了kdiff3 。 當我執行命令時:
git mergetool --tool kdiff3 sk.xml
該工具未顯示,但確實自動解決了沖突。 我非常高興。
現在我的問題是:
1.為什么不能做到這一點?
2.“ kdiff3”能否被信任,它解決了沖突問題嗎? 我手動檢查了我發布的這種類型的沖突,它很好地解決了沖突。 但是,該工具是否可能會不正確地自動合並文件?
盡管我們人類認識到1st分支只是將每行的0
字符更改為1
,但大多數差異/合並工具並不這樣看。 這些程序是面向行的。
2行被刪除。 在該位置插入了2條新行。 任何相似之處均無關緊要。
第二個分支插入另一行,但是在哪里? 我們知道它在</section>
行之前,但是其他分支引用它之前的2行進行刪除。 唯一相同的是<section ... >
行。
人可能會合理地猜測,新key_3
行應在兩個新的后插入key_1
& key_2
線,但沒有合理的辦法是programmaticly肯定。
謹慎行事並非沒有道理。
避免這種情況將需要面向字節/字符的差異工具,但是這樣做也有代價。
master和Test分支上的兩行都已更改。 這是合並沖突的典型情況。
Git不知道,密鑰1和2的狀態現在應該是1(因為在主服務器上)還是0(因為在測試中)。 我們將不得不手動解決該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.