返回顶部
本页目录

mergetool

运行合并冲突解决工具来解决合并冲突

语法

                            
  • git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>…​]

描述

使用 git mergetool 运行多个合并实用程序之一来解决合并冲突。它通常在 git merge 之后运行。

如果给出一个或多个<file>参数,将运行合并工具程序来解决每个文件上的差异(跳过那些没有冲突的文件)。指定目录将包含该路径中所有未解析的文件。如果未指定<file>名称,则 git mergetool 将在每个存在合并冲突的文件上运行合并工具程序

选项

-t <tool>
--tool=<tool>

使用<tool>指定的合并解决程序。有效值包括emerge,gvimdiff,kdiff3,meld,vimdiff和tortoisemerge。运行 git mergetool --tool-help 以获得有效的设置列表。

如果未指定合并解析程序,则 git mergetool 将使用配置变量 merge.tool 。如果未设置配置变量 merge.tool ,则 git mergetool 将选择合适的默认值。

您可以通过设置配置变量 mergetool.<tool>.path 来显式提供该工具的完整路径。例如,您可以通过设置 mergetool.kdiff3.path 来配置kdiff3的绝对路径。否则, git mergetool 假定该工具在PATH中可用。

通过指定在配置变量 mergetool.<tool>.cmd 调用的命令行,可以自定义 git mergetool 来运行替代程序,而不是运行已知的合并工具程序之一。

当 git mergetool 被调用与此工具(或者通过 -t 或 --tool 选项或 merge.tool 配置变量)所配置的命令行将与被调用

  • $BASE 设定为包含在共用基座的临时文件的名称合并(如果有);
  • $LOCAL 设置为包含当前分支上文件内容的临时文件的名称;
  • $REMOTE 设置为包含要合并文件内容的临时文件的名称
  • $MERGED 设置为合并工具应向其中写入合并解析结果的文件的名称。

如果自定义合并工具及其退出代码正确地指示了合并解决方案的成功,则可以将配置变量 mergetool.<tool>.trustExitCode 设置为 true 。否则, git mergetool 将在退出自定义工具后提示用户指示解析成功。

--tool-help

打印可以与 --tool 一起使用的合并工具的列表。

-y
--no-prompt

不要在每次调用合并解析程序之前提示。 --tool 选项或使用 merge.tool 配置变量明确指定合并解析程序,则这是默认设置。

--prompt

在每次调用合并解析程序前提示,给用户一个跳过路径的机会。

-g
--gui

git-mergetool 与调用 -g--gui 选项默认合并工具会从配置的读取 merge.guitool 变量,而不是 merge.tool 。如果 merge.guitool 没有设置,我们将回退到下配置的工具 merge.tool

-no-gui

这将覆盖先前的 -g--gui 设置,并从配置的 merge.tool 变量中读取默认的合并工具。

-O<orderfile>

按照<orderfile>中指定的顺序处理文件,该命令每行具有一个Shell Glob模式。这将覆盖 diff.orderFile 配置变量。要取消 diff.orderFile ,请使用 -O/dev/null

Configuration

mergetool.<tool>.path
覆盖给定工具的路径。这在你的工具不在PATH中时很有用。
mergetool.<tool>.cmd
指定命令以调用指定的合并工具。在外壳程序中使用以下可用变量评估指定的命令:
  • BASE 是临时文件的名称,其中包含要合并的文件的公共基础(如果有);
  • LOCAL 是包含当前分支上文件内容的临时文件的名称;
  • REMOTE 是一个临时文件的名称,其中包含来自合并分支的文件内容;
  • MERGED 包含合并工具应该向其中写入成功合并结果的文件的名称。
mergetool.<tool>.hideResolved
允许用户覆盖特定工具的全局 mergetool.hideResolved
mergetool.<tool>.trustExitCode
对于自定义的合并命令,指定是否可以使用合并命令的退出代码来判断合并是否成功。如果没有设置为 true,则检查合并目标文件的时间戳,如果文件已经更新,则假设合并成功,否则会提示用户说明合并成功。
mergetool.meld.hasOutput
较早版本的 meld 不支持 --output 选项。 Git将通过检查 meld --help 的输出来尝试检测 meld 是否支持 --output 。配置 mergetool.meld.hasOutput 将使Git跳过这些检查,而是使用配置的值。将 mergetool.meld.hasOutput 设置为 true 会告诉Git无条件使用 --output 选项,而 false 则避免使用 --output 。
mergetool.meld.useAutoMerge
当给出 --auto-merge 时,meld将自动合并所有不冲突的部分,突出显示冲突的部分并等待用户决定。将 mergetool.meld.useAutoMerge 设置为 true 会告诉Git无条件地将 --auto-merge 选项与 meld 结合使用。将此值设置为 auto 可以使git检测是否支持 --auto-merge,并且仅在可用时才使用 --auto-merge 。值为 false 避免一起使用 --auto-merge ,它是默认值。
mergetool.vimdiff.layout
vimdiff 后端使用此变量来控制其拆分窗口的外观。即使您使用 Neovim ( nvim ) 或 gVim ( gvim ) 作为合并工具也适用。有关详细信息,请参阅后端特定提示部分。
mergetool.hideResolved
在合并期间,Git 将自动解决尽可能多的冲突,并在其无法解决的任何冲突周围写入包含冲突标记的 MERGED 文件; LOCAL 和 REMOTE 通常代表 Git 冲突解决之前的文件版本。此标志会导致 LOCAL 和 REMOTE 被覆盖,以便仅将未解决的冲突呈现给合并工具。可以通过 mergetool.<tool>.hideResolved 配置变量为每个工具配置。默认为 false 。
mergetool.keepBackup
执行合并后,带有冲突标记的原始文件可以另存为扩展名为 .orig 的文件。如果将此变量设置为 false ,则不会保留该文件。默认为 true (即保留备份文件)。
mergetool.keepTemporaries
调用自定义合并工具时,Git使用一组临时文件传递给该工具。如果工具返回错误且此变量设置为 true ,则将保留这些临时文件,否则将在工具退出后将其删除。默认为 false 。
mergetool.writeToTemp
Git 默认情况下在工作树中写入冲突文件的 BASE ,LOCAL 和 REMOTE 临时版本。设置为 true 时,Git将尝试为这些文件使用临时目录。默认为 false 。
mergetool.prompt
每次调用合并解析程序前都会有提示。