簡體   English   中英

用git合並兩個分支時發生沖突

[英]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_1key_2線,但沒有合理的辦法是programmaticly肯定。

謹慎行事並非沒有道理。

避免這種情況將需要面向字節/字符的差異工具,但是這樣做也有代價。

master和Test分支上的兩行都已更改。 這是合並沖突的典型情況。

Git不知道,密鑰1和2的狀態現在應該是1(因為在主服務器上)還是0(因為在測試中)。 我們將不得不手動解決該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM