Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.53.0 → 2.54.0 no changes
-
2.52.0
2025-11-17
- 2.51.2 no changes
-
2.51.1
2025-10-15
- 2.50.1 → 2.51.0 no changes
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 no changes
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.4 no changes
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 no changes
-
2.41.0
2023-06-01
- 2.38.3 → 2.40.4 no changes
-
2.38.2
2022-12-11
- 2.38.1 no changes
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 no changes
-
2.37.0
2022-06-27
- 2.31.1 → 2.36.6 no changes
-
2.31.0
2021-03-15
- 2.22.1 → 2.30.9 no changes
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 no changes
-
2.20.0
2018-12-09
- 2.12.5 → 2.19.6 no changes
-
2.11.4
2017-09-22
- 2.2.3 → 2.10.5 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
描述
使用 git mergetool 来运行几个合并工具中的一个来解决合并冲突。 它通常在 git merge 之后运行。
如果给出一个或多个 <文件> 参数,合并工具程序会运行以解决每个文件的差异(跳过那些没有冲突的文件)。 指定一个目录将包括该路径中所有未解决的文件。 如果没有指定 <文件> 名称,git mergetool 将对每个有合并冲突的文件运行合并工具程序。
选项
- -t <工具>
- --tool=<工具>
-
使用由<工具>指定的合并解决程序。 有效值包括 emerge、gvimdiff、kdiff3、meld、vimdiff 和 tortoisemerge。运行`git mergetool --tool-help`以获得有效的<工具>设置列表。
如果没有指定合并解决程序,
gitmergetool将使用配置变量merge.tool。 如果配置变量merge.tool没有设置,gitmergetool将自行挑选一个合适的程序。你可以通过设置配置变量`mergetool.<工具>.path`来明确提供工具的完整路径。例如,你可以通过设置`mergetool.kdiff3.path`来配置kdiff3的绝对路径。否则,`git mergetool`会假定该工具在PATH中配置过。
通过在配置变量`mergetool.<工具>.cmd`中指定调用的命令行,`git mergetool`可以代替运行一个已知的合并工具程序,从而指定运行另一个程序。
当
gitmergetool与该工具一起被调用时(通过-t或--tool选项或merge.tool配置变量),配置的命令行将被调用,$BASE被设置为临时文件的名称,包含合并的共同基础(如果有的话);$LOCAL被设置为包含当前分支上的文件内容的临时文件名称;$REMOTE被设置为包含要合并文件内容的临时文件名称,以及合并工具应该将合并的结果写入$MERGED设置的文件中。如果自定义合并工具能够正确地用其退出代码指示合并成功,那么配置变量
mergetool.<工具>.trustExitCode可以被设置为true。 否则,gitmergetool将在用户在自定义工具退出后表明解决成功。 -
--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> 可以是
vimdiff、nvimdiff、gvimdiff中的任意一种。以--tool=<variant> 启动gitmergetool时(如果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 会在工作区中写入冲突文件的临时
BASE、LOCAL和REMOTE版本。设为true时,Git 会尝试为这些文件使用临时目录。默认值为false。 -
mergetool.prompt -
在每次调用合并解决程序前提示,让用户有机会跳过该路径。
-
mergetool.guiDefault -
设为
true则默认使用merge.guitool(等同于指定--gui参数);设为auto则根据是否存在DISPLAY环境变量的值来选择merge.guitool或merge.tool。默认值为false,此时必须显式提供--gui参数才会使用merge.guitool。
临时文件
git mergetool`在解决合并问题时创建*.orig`备份文件。 一旦文件被合并,并且其`git mergetool`会话完成,这些文件就可以安全地删除。
将 mergetool.keepBackup 配置变量设置为 false 会使 git mergetool 在文件成功合并后自动删除备份。
GIT
属于 git[1] 文档