简体中文 ▾ Topics ▾ Latest version ▾ git-mergetool last updated in 2.52.0

名称

git-mergetool - 运行合并冲突解决工具以解决合并冲突

概述

'git mergetool' [--tool=<工具>] [-y |--[no-]prompt] [<文件>…​] 。

描述

使用 git mergetool 来运行几个合并工具中的一个来解决合并冲突。 它通常在 git merge 之后运行。

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

选项

-t <工具>
--tool=<工具>

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

如果没有指定合并解决程序,git mergetool 将使用配置变量 merge.tool。 如果配置变量 merge.tool 没有设置,git mergetool 将自行挑选一个合适的程序。

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

通过在配置变量`mergetool.<工具>.cmd`中指定调用的命令行,`git mergetool`可以代替运行一个已知的合并工具程序,从而指定运行另一个程序。

git mergetool 与该工具一起被调用时(通过 -t--tool 选项或 merge.tool 配置变量),配置的命令行将被调用, $BASE 被设置为临时文件的名称,包含合并的共同基础(如果有的话); $LOCAL 被设置为包含当前分支上的文件内容的临时文件名称;$REMOTE 被设置为包含要合并文件内容的临时文件名称,以及合并工具应该将合并的结果写入 $MERGED 设置的文件中。

如果自定义合并工具能够正确地用其退出代码指示合并成功,那么配置变量 mergetool.<工具>.trustExitCode 可以被设置为 true。 否则,git mergetool 将在用户在自定义工具退出后表明解决成功。

--tool-help

打印出可以和 --tool 命令一起使用的merge工具列表。

-y
--no-prompt

在每次调用合并解决程序之前不会提示。 如果用 --tool 选项或 merge.tool 配置变量明确指定了合并解决程序,默认就是这种做法。

--prompt

在每次调用合并解决程序前提示,让用户有机会跳过该路径。

-g
--gui

当使用 -g--gui 选项调用 git-mergetool 时,默认的合并工具将从配置的 merge.guitool 变量中读取,而不是 merge.tool 变量。如果未设置 merge.guitool 变量,我们将退回到在 merge.tool 下配置的工具。这可以通过配置变量 mergetool.guiDefault 自动选择。

--no-gui

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

-O<顺序控制文件>

按照 <顺序文件> 中指定的顺序处理文件,每行有一个 shell匹配模式。 这会覆盖 diff.orderFile 配置的变量(见 git-config[1])。 可以使用使用 -O/dev/null`取消 `diff.orderFile

配置

本节中这一行以下的内容都是从 git-config[1] 文档中摘录的。其内容与那里的内容相同:

mergetool.<tool>.path

覆盖给定工具的路径。如果你的工具不在 $PATH 中,这会很有用。

mergetool.<tool>.cmd

指定调用该 merge 工具的命令。该命令会在 shell 中求值,并可使用下列变量:BASE 是一个临时文件名,包含待合并文件的共同基础(如果有);LOCAL 是一个临时文件名,包含当前分支上该文件的内容;REMOTE 是一个临时文件名,包含正在合并的分支中该文件的内容;MERGED 包含 merge 工具应写入成功合并结果的文件名。

mergetool.<tool>.hideResolved

允许用户为特定工具覆盖全局 mergetool.hideResolved 的值。完整说明见 mergetool.hideResolved

mergetool.<tool>.trustExitCode

对于自定义 merge 命令,指定是否可以使用该 merge 命令的退出码来判断合并是否成功。如果未设为 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 无条件对 meld 使用 --auto-merge 选项。将其设为 auto 会让 git 检测是否支持 --auto-merge,并仅在可用时使用该选项。值为 false 则完全避免使用 --auto-merge,这也是默认值。

mergetool.<variant>.layout

为 vimdiff 的 <variant> 配置分屏窗口布局,<variant> 可以是 vimdiffnvimdiffgvimdiff 中的任意一种。以 --tool=<variant> 启动 git mergetool 时(如果 merge.tool 已配置为 <variant>,也可不带 --tool),Git 会查阅 mergetool.<variant>.layout 来确定该工具的布局。如果没有对应 variant 的专用配置,则回退使用 vimdiff 的配置;如果这也不可用,则使用一个默认的 4 窗口布局。关于如何配置布局,参见“BACKEND SPECIFIC HINTS” 节。

mergetool.hideResolved

在合并期间,Git 会自动尽可能多地解决冲突,并写出 $MERGED 文件,在其无法解决的冲突周围保留冲突标记;$LOCAL$REMOTE 通常是 Git 进行冲突解决之前的文件版本。该标志会覆盖 $LOCAL$REMOTE,使 merge 工具只看到未解决的冲突。可通过 mergetool.<tool>.hideResolved 配置变量按工具分别配置。默认值为 false

mergetool.keepBackup

执行 merge 后,带冲突标记的原始文件可保存为一个带 .orig 扩展名的文件。如果该变量设为 false,则不保留该文件。默认值为 true(即保留备份文件)。

mergetool.keepTemporaries

调用自定义 merge 工具时,Git 会使用一组临时文件传递给该工具。如果工具返回错误且该变量设为 true,则这些临时文件会被保留;否则会在工具退出后删除。默认值为 false

mergetool.writeToTemp

默认情况下,Git 会在工作区中写入冲突文件的临时 BASELOCALREMOTE 版本。设为 true 时,Git 会尝试为这些文件使用临时目录。默认值为 false

mergetool.prompt

在每次调用合并解决程序前提示,让用户有机会跳过该路径。

mergetool.guiDefault

设为 true 则默认使用 merge.guitool(等同于指定 --gui 参数);设为 auto 则根据是否存在 DISPLAY 环境变量的值来选择 merge.guitoolmerge.tool。默认值为 false,此时必须显式提供 --gui 参数才会使用 merge.guitool

临时文件

git mergetool`在解决合并问题时创建*.orig`备份文件。 一旦文件被合并,并且其`git mergetool`会话完成,这些文件就可以安全地删除。

mergetool.keepBackup 配置变量设置为 false 会使 git mergetool 在文件成功合并后自动删除备份。

后端特定提示

vimdiff

Warning

Missing zh_HANS-CN/mergetools/vimdiff.adoc

See original version for this content.

GIT

属于 git[1] 文档