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

jan*_*195 9 git meld

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

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

Jos*_*son 11

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

[mergetool "meld"]
  cmd = meld --auto-merge "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
Run Code Online (Sandbox Code Playgroud)

这与 Git 默认运行的指定命令相同--auto-merge,以便 Meld 自动解析它可以解析的内容。


Von*_*onC 8

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

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

请参阅Seth House ( )提交的提交 9d9cf23提交 de8dafb提交 98ea309(2021 年 2 月 9 日)。(由Junio C Hamano 合并 -- --提交 78a26cb中,2021 年 2 月 17 日)whiteinge
gitster

mergetool: 添加hideResolved配置

原始实现者: Felipe Contreras
签名者: Seth House

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

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

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

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

在对流行合并工具的小型调查中没有发现任何不利影响,因此此行为默认为true. 但是,可以通过设置为来
全局禁用它。mergetool.hideResolvedfalse

请参阅“ Mergetools:停止进行三向合并!

git config现在包含在其手册页中:

mergetool.hideResolved

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

该标志会导致“LOCAL”和“REMOTE”被覆盖,以便仅将未解决的冲突呈现给合并工具。

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

在OP的情况下:

git config --global mergetool.meld.hideResolved true
Run Code Online (Sandbox Code Playgroud)

这在以下内容中有描述:

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

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

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

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

hide_resolved_enabled () {
    return 1
}
Run Code Online (Sandbox Code Playgroud)

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

例如:

  • 工具可能会使用自定义冲突解决算法,并且更愿意忽略 Git 冲突解决的结果。
  • 工具可能想要直观地比较/对比合并之前的文件版本(保存到“LOCAL”、“REMOTE”和“BASE”)与 Git 的冲突解决结果(保存到“MERGED”)。

git config现在包含在其手册页中:

mergetool.<tool>.hideResolved

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


chr*_*bia 6

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