为什么我的Git合并会出现冲突?

时间:2014-01-20 15:33:30

标签: git merge merge-conflict-resolution

当只有一个已更改时,我在两个本地分支之间的合并上遇到冲突。更糟糕的是,冲突标记毫无意义。这已经发生过两次了。有人能告诉我这里发生了什么,以及如何避免它?

看起来合并是将文件的左右版本与基础进行比较,而不是相互比较。我对一段时间没有改变的东西感到矛盾。

详细

回复。有两个分支,'主人'和'开发'。工作流程如下:

  1. 创建了新的回购。并手工复制现有代码。
  2. git checkout -b dev
  3. [一堆提交。]
  4. git checkout master; git commit --squash dev
  5. 将代码手动复制到我们的发布程序中。
  6. 时间过去了;对主人做了一些提交以修复小错误。
  7. git checkout dev; git merge master
  8. 此时问题就出现了。

    首先:我遇到了合并冲突。这对我没有意义;唯一的变化是'主'。三方合并应该干净利落地解决。

    我认为使用commit --squash会使合并的基本文件比其他版本更旧,但我已经手动比较了有问题的文件的所有三个版本,我仍然不喜欢看到了。大多数标记的更改是基础中缺少的部分,但在左侧和右侧版本中相同。不应该合并看到没有变化吗?

    其次:我所拥有的合并标记已被破坏。来自左侧版本的部件与来自正确版本的部件不匹配。这是正常的吗?

    一些示例代码。这里唯一的实际变化是添加了行def buffer b-product for product.(看看“SKU Missing”代码如何在第一个冲突块的左侧块中,但是第二个的右侧块冲突阻止?):

    <<<<<<< HEAD
        if not avail b-orddet
        then
            {&throw} ("No gapnet-orddet record", 300).
    
        op-errorred = no.
    
        /** SKU missing **/
        if b-orddet.sku = ?
        or b-orddet.sku = ""
        then
        do:
            run make_report_line
                ( input b-orddet.order-num,
                  input b-orddet.line-no,
                  input "e",
                  input "SKU not set" ).
    
            op-errorred = yes.
        end.
    =======
        def buffer b-product for product.
    
        if not avail b-orddet
        then
            {&throw} ("No gapnet-orddet record", 300).
    >>>>>>> master
    
        op-errorred = no.
    
    <<<<<<< HEAD
        /** SKU doesn't match an Accord product **/
        if not can-find( product
                   where product.p-code = b-orddet.sku )
        then
        do:
    =======
        /** SKU missing **/
        if b-orddet.sku = ?
        or b-orddet.sku = ""
        then
        do:
            run make_report_line
                ( input b-orddet.order-num,
                  input b-orddet.line-no,
                  input "e",
                  input "SKU not set" ).
    
            op-errorred = yes.
        end.
    
        find b-product
            where b-product.p-code = b-orddet.sku
            no-lock no-error.
    
        /** SKU doesn't match an Accord product **/
        if not avail b-product
        then
        do:
    >>>>>>> master
    

1 个答案:

答案 0 :(得分:-1)

如果要从主分区合并到分支

git fetch origin/branch
git reset --hard origin/branch
git pull
git merge master