必须显式配置merge.tool=kdiff3,否则Git不调用KDiff3;需同时设置mergetool.kdiff3.path指定路径、mergetool.kdiff3.trustExitCode=true,并推荐配置mergetool.kdiff3.cmd以确保三路参数正确传递。

git config 里怎么写 KDiff3 的 merge.tool 配置
必须显式指定 merge.tool 为 kdiff3,否则 Git 不会调用它处理冲突。Git 默认不认 KDiff3,哪怕你已安装并能双击打开——它只在你明确告诉它“用这个”时才介入。
执行以下命令(Windows/macOS/Linux 通用):
git config --global merge.tool kdiff3 git config --global mergetool.kdiff3.path "/path/to/kdiff3" git config --global mergetool.kdiff3.trustExitCode true
注意路径写法差异:
- Windows:路径含空格也无需引号,但要用正斜杠或双反斜杠,例如
C:/Program Files/KDiff3/kdiff3.exe或C:\Program Files\KDiff3\kdiff3.exe - macOS:通常为
/Applications/kdiff3.app/Contents/MacOS/kdiff3(需确认实际安装位置) - Linux:多数包管理器安装后可直接写
kdiff3,前提是which kdiff3能返回路径
为什么 git mergetool 启动后没反应或报错
常见原因是 Git 传给 KDiff3 的参数格式不匹配,或 KDiff3 版本太旧不支持 Git 的三路合并协议。
关键修复点:
- 确保使用 KDiff3 1.0 以上版本(2026 年主流是 1.10+),旧版对
BASE文件识别不稳定 - 强制 Git 使用标准三路参数:运行
git config --global mergetool.kdiff3.cmd 'kdiff3 "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'(Windows 用户把kdiff3换成完整路径) - 如果提示
Cannot find base file,说明 Git 没生成临时 BASE 文件——检查是否在 rebase 中用了--no-ff或跳过了 common ancestor 计算
KDiff3 界面里“Accept”按钮点了没效果
这不是 Bug,而是 KDiff3 的默认行为:它不会自动保存并退出,必须手动点击 Save(或按 Ctrl+S),再点 Quit(或按 Ctrl+Q)。
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
否则 Git 会一直卡在等待状态,git status 仍显示 unmerged,git commit 会失败。
顺手建议:
- 在 KDiff3 设置中勾选
Auto save merged file on exit(Settings → Configure KDiff3 → Merge) - 关闭
Ask for saving before exit,避免每次弹确认框打断流程 - 如果合并后文件编码异常(如中文变乱码),检查 KDiff3 的
Encoding设置是否设为UTF-8 with BOM或自动检测
和 VS Code、meld 等工具共存时怎么切换
Git 允许 per-repo 覆盖全局配置,适合混合环境:
进到某个项目目录下,运行:
git config merge.tool vscode git config mergetool.vscode.cmd 'code --wait --merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
此时 git mergetool 在该项目中就走 VS Code;其他项目仍走 KDiff3。
真正容易被忽略的是:KDiff3 的三方合并逻辑依赖 Git 正确提供 $BASE。如果某次 git pull --rebase 过程中发生冲突,而你误用 git add && git commit 绕过 mergetool,KDiff3 就再没机会介入——它只响应 git mergetool 命令,不监听工作区文件变化。

















