当我使用 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
的一种方法是作为双向或三向差异.
如果单独提取冲突标记的每个"侧",则外部工具可以将这些冲突表示为并排差异。然而,许多合并工具反而
LOCAL
和REMOTE
差异,两者都包含合并之前的文件版本.
由于自动解决的冲突 Git 不存在,因此它会强制用户手动重新解决冲突。
一些合并工具也显示MERGED
但通常仅供参考,而不是解决冲突的焦点。这将添加一个
mergetool.hideResolved
标志,该标志将覆盖冲突文件的每个相应"端"的LOCAL
和REMOTE
,从而隐藏 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,无论显示多少更改,它都会进入下一个冲突。或者在菜单中转到查找 -> 转到下一步 ->冲突