如何将git mergetool融合为仅显示冲突而不是差异?

时间:2014-03-06 13:04:18

标签: git meld

当我使用meld作为git mergetool来解决合并时的冲突时,meld向我展示了git自动解决的本地/输出和远程/输出文件(蓝色或绿色)之间的差异,而不仅仅是实际的冲突(即红色突出显示)。当我按下向下箭头时,它会转到下一个(蓝色/绿色)差异,而不是下一个冲突(红色)。在this主题中,图片说明了这一点。

怎么可能:   - 忽略不冲突的差异   - 或者进入下一个冲突(比如在kdiff3中),而不是停止差异 ??

3 个答案:

答案 0 :(得分:4)

在meld中,您可以点击更改>合并全部,将合并除冲突之外的大多数更改。

答案 1 :(得分:1)

除了特定于 meld 的参数之外,您现在还有新的 Git 选项:

在 Git 2.31(2021 年第 1 季度)中,“git mergetool(man) 提供未修改的冲突路径的三个版本(基本、本地和远程)。
该命令学会了选择性地准备这些文件,其中已解决的非冲突部分

commit 9d9cf23commit de8dafbcommit 98ea309Seth House (whiteinge)(2021 年 2 月 9 日)。
(2021 年 2 月 17 日在 Junio C Hamano -- gitster --commit 78a26cb 合并)

<块引用>

mergetool:添加hideResolved配置

原始实现者:Felipe Contreras
签字人:Seth House

<块引用>

mergetool 的目的是帮助用户解决 Git 无法自动解决的任何冲突。
如果存在必须手动解决的冲突,Git 将写入一个名为 MERGED 的文件,其中包含 Git 能够自行解决的所有内容,以及包含在冲突标记中的所有无法解决的内容。

MERGED 视为两路或三路差异的一种方式。
如果冲突标记的每一“边”都单独提取,则外部工具可以将这些冲突表示为并排差异。

然而,许多合并工具改为 diff LOCALREMOTE,它们都包含合并前的文件版本。
由于 Git 自动解决的冲突不存在,因此强制用户手动重新解决这些冲突。
一些合并工具也显示 MERGED,但通常仅供参考,而不是解决冲突的焦点。

这会添加一个 mergetool.hideResolved 标志,它将用冲突文件的每个对应“侧面”覆盖 LOCALREMOTE,从而隐藏 Git 能够自行解决的所有冲突。< br/> 覆盖这些文件将立即使使用它们的任何合并工具受益,而无需对工具进行任何更改。

small survey of popular mergetools 中未发现任何不利影响,因此此行为默认为 true
但是,可以通过将 mergetool.hideResolved 设置为 false 来全局禁用它。

见“Mergetools: Stop doing three-way merges!

git config 现在包含在其 man page 中:

<块引用>

mergetool.hideResolved

在合并期间,Git 将自动解决尽可能多的冲突 可能并写入包含冲突标记的“MERGED”文件 它无法解决的任何冲突; 'LOCAL' 和 'REMOTE' 通常 代表 Git 冲突之前的文件版本 分辨率。

这个标志会导致 'LOCAL' 和 'REMOTE' 被覆盖,所以 只有未解决的冲突才会提交给合并工具。

可以 通过 mergetool.<tool>.hideResolved 为每个工具配置 配置变量。默认为 true

在 OP 的情况下:

git config --global mergetool.meld.hideResolved true

这在:

<块引用>

mergetool:为 hideResolved 标志添加每个工具的支持和覆盖

帮助:Johannes Sixt
帮助:Junio C Hamano
签字人:Seth House

<块引用>

添加每个工具覆盖标志,以便用户可以通过将 mergetool.<tool>.hideResolved 设置为 false 为一个工具启用该标志并为另一个工具禁用它。

此外,合并工具的作者或维护者可以选择覆盖该合并工具的默认 hideResolved 值。
如果 mergetools/<tool> shell 脚本包含一个 hide_resolved_enabled 函数,它将在调用合并工具时被调用,并且返回值将用作 hideResolved 标志的默认值。

hide_resolved_enabled () {
    return 1
}

如果合并工具想要或需要访问冲突文件的原始、未修改的“本地”和“远程”版本,则可能需要禁用。

例如:

  • 某个工具可能会使用自定义的冲突解决算法,并且倾向于忽略 Git 冲突解决的结果。
  • 某个工具可能希望将合并前的文件版本(保存到“LOCAL”、“REMOTE”和“BASE”)与 Git 的冲突解决结果(保存到“MERGED”)进行视觉比较/对比。

git config 现在包含在其 man page 中:

<块引用>

mergetool.<tool>.hideResolved

允许用户覆盖全局 mergetool.hideResolved 值 对于特定工具。

答案 2 :(得分:0)

将以下内容添加到您的.gitconfig

[mergetool "meld"]
  cmd = meld --auto-merge "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

这与Git默认运行的命令相同,并且指定了--auto-merge,以便Meld自动解决它可以解决的问题。

相关问题