【问题标题】:Git merge, but adding in all the conflicting linesGit 合并,但添加所有冲突行
【发布时间】:2022-12-16 05:18:24
【问题描述】:

code.gomain 分支上目前包含:

package code

some Golang code() {
}

code.go 在分行 new-branch 目前有:

package code

some other Golang code() {
}

even more code() {
}

理想情况下,我希望最终结果是:

package code

some Golang code() {
}

some other Golang code() {
}

even more code() {
}

我怎样才能将new-branch“合并”到main上以达到上述结果?当我合并时,git 给了我冲突,因为 some Golang code()some other Golangcode() 在分支之间的同一条线上。

如果我选择“接受两个传入”,我的大括号之一会丢失,从而导致语法错误。我只是希望生成的 code.go 文件以完整的形式包含所有这 3 个代码块。

【问题讨论】:

  • 对我来说,我手动完成,我不知道是否有更简单的方法,所以你可以比较更改(在 vscode 上)并从新分支复制代码并接受主分支然后过去复制的代码将是功能。您可以使用 git diff 命令来查看和比较更改,或者使用 vscode 比较更改,或者使用 GitHub Desktop 来更容易地注意到更改
  • 请注意,“接受两个传入”是您的 IDE 的一部分,不是Git 的一部分。有一种合并形式叫做联合合并, git merge-file 甚至支持它,但它通常不适合这里,无论如何你应该“手动”进行这个特定的合并。最多,在使用 Git(不是某些 IDE)时,您可能会在三个输入文件上调用 git merge-file --union 并手动调整结果。

标签: git go


【解决方案1】:

这里的问题是 git 无法确定应该先执行哪个代码:将 some Golang code 移到末尾与将它放在开头一样自然。因此,手动合并是可行的方法,这样您就可以确保代码以正确的顺序结束。

【讨论】:

    【解决方案2】:

    不会是自动执行,因为你在这里有“经典”冲突(我在 GUI 中显示它,但在 Git 内部看到同样的事情):一行代码被另一个sn-p取代

    您必须使用 Git 支持的任何(好的)合并工具手动执行合并并解决冲突

    【讨论】:

      【解决方案3】:

      如果我选择“接受两个传入”,我的大括号之一会丢失,从而导致语法错误。我只是希望生成的 code.go 文件以完整的形式包含所有这 3 个代码块。

      不幸的是,git 和其他常见 VCS 使用的合并算法不是“代码感知”的,它们仅在文本.

      所以,虽然很明显哪些线属于一起,自动化工具必须尝试猜测哪些线应该去哪里,而不知道它们是什么意思。要从工具的角度看问题,请保留文件的结构,但用废话替换单词和标点符号:

      habble hibble
      
      quig quag quog blib-blob frong
      gnorf
      

      habble hibble
      
      quig quaggledy quog blib-blob frong
      gnorf
      
      quoogle quog blib-blob frong
      gnorf
      

      合并算法看到这两个分支在第 3、6 和 7 行添加了不同的文本,但它们在第 4 行都有“gnorf”。因此它假设这是相同的“gnorf”,并给你这样的东西:

      habble hibble
      
      quig quag quog blib-blob frong
      quig quaggledy quog blib-blob frong
      gnorf
      
      quoogle quog blib-blob frong
      gnorf
      

      该算法可以是较少的聪明,而不是寻找在两个分支中添加相同代码的情况,但这同样经常是错误的。

      【讨论】:

        猜你喜欢
        • 2017-07-24
        • 1970-01-01
        • 2012-04-07
        • 2011-12-16
        • 2016-05-05
        • 1970-01-01
        • 2015-10-15
        • 2014-10-07
        • 1970-01-01
        相关资源
        最近更新 更多