如何融合为 git 合并工具以仅显示冲突而不是差异



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

我怎么能

  • 忽略不冲突的差异
  • 或者转到下一个冲突(如在 kdiff3 中),而不停止差异 ??

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

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

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

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

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

参见 提交 9d9cf23, 提交 de8dafb, 提交 98ea309 (09 Feb 2021) by Seth House (whiteinge).
(由 Junio C Hamano --gitster-- 合并于 commit 78a26cb,2021 年 2 月 17 日)

mergetool:添加hideResolved配置

原始实施者:费利佩·孔特雷拉斯
签名者:塞思·豪斯

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

考虑MERGED的一种方法是作为双向或三向差异.
如果单独提取冲突标记的每个"侧",则外部工具可以将这些冲突表示为并排差异。

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

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

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

请参阅"合并工具:停止执行三向合并!

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

mergetool.hideResolved

在合并期间,Git 将自动解决尽可能多的冲突 可能并写入包含冲突标记的"合并"文件 任何无法解决的冲突;通常为"本地"和"远程" 表示 Git 冲突之前的文件版本 分辨率。

此标志会导致"本地"和"远程"被覆盖,因此 仅向合并工具显示未解决的冲突。

能 通过mergetool.<tool>.hideResolved按工具进行配置 配置变量。默认为true

在OP的情况下:

git config --global mergetool.meld.hideResolved true

这在以下中描述:

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

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

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

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

hide_resolved_enabled () {
return 1
}

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

例如:

  • 工具可能使用自定义冲突解决算法,并且更喜欢忽略 Git 冲突解决的结果。
  • 工具可能希望直观地比较/控制合并前的文件版本(保存到"LOCAL"、"REMOTE"和"BASE")与 Git 的冲突解决结果(保存到"合并")。

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

mergetool.<tool>.hideResolved

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

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

如果您在Mac中使用cmd + D,无论显示多少更改,它都会进入下一个冲突。或者在菜单中转到查找 -> 转到下一步 ->冲突

最新更新