当我使用 meld 作为 git mergetool 来解决合并时的冲突时,meld 向我显示 git 自动解决的本地/输出和远程/输出文件(蓝色或绿色)之间的差异,而不仅仅是实际冲突(红色突出显示) . 当我点击向下箭头时,它会转到下一个(蓝色/绿色)差异,而不是下一个冲突(红色)。在本主题中,一张图片说明了这一点。
怎么可能: - 忽略不冲突的差异 - 或进入下一个冲突(如在 kdiff3 中),而不停止差异?
在 meld 中,您可以单击 Changes > Merge All,这将合并除冲突之外的大多数更改。
将以下内容添加到您的.gitconfig
:
[mergetool "meld"]
cmd = meld --auto-merge "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
这与 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
是两路或三路差异。
如果单独提取冲突标记的每个“边”,则外部工具可以将这些冲突表示为并排差异。然而,许多mergetools 代替diff
LOCAL
并且REMOTE
两者都包含合并之前的文件版本。
由于 Git 自动解决的冲突不存在,因此它会强制用户手动重新解决这些冲突。
一些合并工具也显示MERGED
,但通常仅供参考,而不是解决冲突的焦点。这会添加一个
mergetool.hideResolved
标志,该标志将覆盖冲突文件LOCAL
的REMOTE
每个相应“边”,从而隐藏 Git 能够自行解决的所有冲突。
覆盖这些文件将立即使使用它们的任何合并工具受益,而无需对工具进行任何更改。在对流行合并工具的小型调查中没有发现任何不利影响,因此此行为默认为
true
.
但是,可以通过设置为 来全局禁用mergetool.hideResolved
它false
。
请参阅“ Mergetools:停止进行三向合并! ”
git config
现在在其手册页中包含:
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 的冲突解决结果。
- 一个工具可能希望将合并之前的文件版本(保存到“本地”、“远程”和“基础”)与 Git 的冲突解决结果(保存到“合并”)进行直观比较/对比。
git config
现在在其手册页中包含:
mergetool.<tool>.hideResolved
允许用户覆盖
mergetool.hideResolved
特定工具的全局值。