当我使用meld作为git mergetool来解决合并时的冲突时,meld向我展示了git自动解决的本地/输出和远程/输出文件(蓝色或绿色)之间的差异,而不仅仅是实际的冲突(即红色突出显示)。当我按下向下箭头时,它会转到下一个(蓝色/绿色)差异,而不是下一个冲突(红色)。在this主题中,图片说明了这一点。
怎么可能: - 忽略不冲突的差异 - 或者进入下一个冲突(比如在kdiff3中),而不是停止差异 ??
答案 0 :(得分:4)
在meld中,您可以点击更改>合并全部,将合并除冲突之外的大多数更改。
答案 1 :(得分:1)
除了特定于 meld 的参数之外,您现在还有新的 Git 选项:
在 Git 2.31(2021 年第 1 季度)中,“git mergetool
”(man) 提供未修改的冲突路径的三个版本(基本、本地和远程)。
该命令学会了选择性地准备这些文件,其中已解决的非冲突部分。
见commit 9d9cf23的commit de8dafb、commit 98ea309、Seth House (whiteinge
)(2021 年 2 月 9 日)。
(2021 年 2 月 17 日在 Junio C Hamano -- gitster
-- 被 commit 78a26cb 合并)
mergetool
:添加hideResolved
配置原始实现者:Felipe Contreras
签字人:Seth House
mergetool 的目的是帮助用户解决 Git 无法自动解决的任何冲突。
如果存在必须手动解决的冲突,Git 将写入一个名为 MERGED 的文件,其中包含 Git 能够自行解决的所有内容,以及包含在冲突标记中的所有无法解决的内容。
将 MERGED
视为两路或三路差异的一种方式。
如果冲突标记的每一“边”都单独提取,则外部工具可以将这些冲突表示为并排差异。
然而,许多合并工具改为 diff LOCAL
和 REMOTE
,它们都包含合并前的文件版本。
由于 Git 自动解决的冲突不存在,因此强制用户手动重新解决这些冲突。
一些合并工具也显示 MERGED
,但通常仅供参考,而不是解决冲突的焦点。
这会添加一个 mergetool.hideResolved
标志,它将用冲突文件的每个对应“侧面”覆盖 LOCAL
和 REMOTE
,从而隐藏 Git 能够自行解决的所有冲突。< br/>
覆盖这些文件将立即使使用它们的任何合并工具受益,而无需对工具进行任何更改。
在 small survey of popular mergetools 中未发现任何不利影响,因此此行为默认为 true
。
但是,可以通过将 mergetool.hideResolved
设置为 false
来全局禁用它。
见“Mergetools: Stop doing three-way merges!”
git config
现在包含在其 man page 中:
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 config
现在包含在其 man page 中:
mergetool.<tool>.hideResolved
允许用户覆盖全局 mergetool.hideResolved
值
对于特定工具。
答案 2 :(得分:0)
将以下内容添加到您的.gitconfig
:
[mergetool "meld"]
cmd = meld --auto-merge "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
这与Git默认运行的命令相同,并且指定了--auto-merge
,以便Meld自动解决它可以解决的问题。