当我使用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 自动解析它可以解析的内容。
除了特定于融合的参数之外,您现在还拥有新的 Git 选项:
在 Git 2.31(2021 年第一季度)中,“ git mergetool” (man)提供未修改的冲突路径的三个版本(基本版本、本地版本和远程版本)。
该命令学会了选择性地准备这些文件,其中不冲突的部分已经解决。
请参阅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
LOCAL,REMOTE它们都包含合并之前的文件版本。
由于 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。Run Code Online (Sandbox Code Playgroud)hide_resolved_enabled () { return 1 }如果合并工具想要或需要访问冲突文件的原始、未修改的“本地”和“远程”版本,则可能需要禁用。
例如:
- 工具可能会使用自定义冲突解决算法,并且更愿意忽略 Git 冲突解决的结果。
- 工具可能想要直观地比较/对比合并之前的文件版本(保存到“LOCAL”、“REMOTE”和“BASE”)与 Git 的冲突解决结果(保存到“MERGED”)。
git config现在包含在其手册页中:
mergetool.<tool>.hideResolved允许用户覆盖
mergetool.hideResolved特定工具的全局值。