2007-03-06 06:05:16 +01:00
|
|
|
git-mergetool(1)
|
|
|
|
================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
|
|
|
git-mergetool - Run merge conflict resolution tools to resolve merge conflicts
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2011-07-02 04:38:26 +02:00
|
|
|
[verse]
|
2013-05-09 03:16:55 +02:00
|
|
|
'git mergetool' [--tool=<tool>] [-y | --[no-]prompt] [<file>...]
|
2007-03-06 06:05:16 +01:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
|
|
|
|
2008-03-08 21:46:34 +01:00
|
|
|
Use `git mergetool` to run one of several merge utilities to resolve
|
2010-01-10 00:33:00 +01:00
|
|
|
merge conflicts. It is typically run after 'git merge'.
|
2007-03-06 06:05:16 +01:00
|
|
|
|
|
|
|
If one or more <file> parameters are given, the merge tool program will
|
2011-09-16 04:12:10 +02:00
|
|
|
be run to resolve differences on each file (skipping those without
|
|
|
|
conflicts). Specifying a directory will include all unresolved files in
|
|
|
|
that path. If no <file> names are specified, 'git mergetool' will run
|
|
|
|
the merge tool program on every file with merge conflicts.
|
2007-03-06 06:05:16 +01:00
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
2009-01-16 22:42:33 +01:00
|
|
|
-t <tool>::
|
|
|
|
--tool=<tool>::
|
2007-03-06 06:05:16 +01:00
|
|
|
Use the merge resolution program specified by <tool>.
|
2012-07-23 23:16:12 +02:00
|
|
|
Valid values include emerge, gvimdiff, kdiff3,
|
|
|
|
meld, vimdiff, and tortoisemerge. Run `git mergetool --tool-help`
|
|
|
|
for the list of valid <tool> settings.
|
2007-03-27 17:38:59 +02:00
|
|
|
+
|
2010-01-10 00:33:00 +01:00
|
|
|
If a merge resolution program is not specified, 'git mergetool'
|
2008-03-08 21:46:34 +01:00
|
|
|
will use the configuration variable `merge.tool`. If the
|
2010-01-10 00:33:00 +01:00
|
|
|
configuration variable `merge.tool` is not set, 'git mergetool'
|
2007-03-27 17:38:59 +02:00
|
|
|
will pick a suitable default.
|
2007-10-17 19:16:11 +02:00
|
|
|
+
|
|
|
|
You can explicitly provide a full path to the tool by setting the
|
2008-03-08 21:46:34 +01:00
|
|
|
configuration variable `mergetool.<tool>.path`. For example, you
|
2007-10-17 19:16:11 +02:00
|
|
|
can configure the absolute path to kdiff3 by setting
|
2010-01-10 00:33:00 +01:00
|
|
|
`mergetool.kdiff3.path`. Otherwise, 'git mergetool' assumes the
|
2008-03-08 21:46:34 +01:00
|
|
|
tool is available in PATH.
|
2008-03-08 21:47:06 +01:00
|
|
|
+
|
2008-12-09 07:23:51 +01:00
|
|
|
Instead of running one of the known merge tool programs,
|
2010-01-10 00:33:00 +01:00
|
|
|
'git mergetool' can be customized to run an alternative program
|
2008-08-05 18:12:05 +02:00
|
|
|
by specifying the command line to invoke in a configuration
|
2008-03-08 21:47:06 +01:00
|
|
|
variable `mergetool.<tool>.cmd`.
|
|
|
|
+
|
2010-01-10 00:33:00 +01:00
|
|
|
When 'git mergetool' is invoked with this tool (either through the
|
2008-03-08 21:47:06 +01:00
|
|
|
`-t` or `--tool` option or the `merge.tool` configuration
|
|
|
|
variable) the configured command line will be invoked with `$BASE`
|
|
|
|
set to the name of a temporary file containing the common base for
|
|
|
|
the merge, if available; `$LOCAL` set to the name of a temporary
|
|
|
|
file containing the contents of the file on the current branch;
|
|
|
|
`$REMOTE` set to the name of a temporary file containing the
|
|
|
|
contents of the file to be merged, and `$MERGED` set to the name
|
|
|
|
of the file to which the merge tool should write the result of the
|
|
|
|
merge resolution.
|
|
|
|
+
|
|
|
|
If the custom merge tool correctly indicates the success of a
|
2008-12-09 07:23:51 +01:00
|
|
|
merge resolution with its exit code, then the configuration
|
2008-03-08 21:47:06 +01:00
|
|
|
variable `mergetool.<tool>.trustExitCode` can be set to `true`.
|
2010-01-10 00:33:00 +01:00
|
|
|
Otherwise, 'git mergetool' will prompt the user to indicate the
|
2008-03-08 21:47:06 +01:00
|
|
|
success of the resolution after the custom tool has exited.
|
2007-03-06 06:05:16 +01:00
|
|
|
|
2012-08-10 09:39:22 +02:00
|
|
|
--tool-help::
|
|
|
|
Print a list of merge tools that may be used with `--tool`.
|
|
|
|
|
2009-01-16 22:42:33 +01:00
|
|
|
-y::
|
|
|
|
--no-prompt::
|
2008-11-13 13:41:14 +01:00
|
|
|
Don't prompt before each invocation of the merge resolution
|
|
|
|
program.
|
2014-04-23 19:07:20 +02:00
|
|
|
This is the default if the merge resolution program is
|
|
|
|
explicitly specified with the `--tool` option or with the
|
|
|
|
`merge.tool` configuration variable.
|
2008-11-13 13:41:14 +01:00
|
|
|
|
|
|
|
--prompt::
|
2014-04-23 19:07:20 +02:00
|
|
|
Prompt before each invocation of the merge resolution program
|
|
|
|
to give the user a chance to skip the path.
|
2008-11-13 13:41:14 +01:00
|
|
|
|
2018-10-24 18:25:31 +02:00
|
|
|
-g::
|
|
|
|
--gui::
|
|
|
|
When 'git-mergetool' is invoked with the `-g` or `--gui` option
|
|
|
|
the default merge tool will be read from the configured
|
2019-04-29 08:21:14 +02:00
|
|
|
`merge.guitool` variable instead of `merge.tool`. If
|
|
|
|
`merge.guitool` is not set, we will fallback to the tool
|
mergetool: new config guiDefault supports auto-toggling gui by DISPLAY
When no merge.tool or diff.tool is configured or manually selected, the
selection of a default tool is sensitive to the DISPLAY variable; in a
GUI session a gui-specific tool will be proposed if found, and
otherwise a terminal-based one. This "GUI-optimizing" behavior is
important because a GUI can make a huge difference to a user's ability
to understand and correctly complete a non-trivial conflicting merge.
Some time ago the merge.guitool and diff.guitool config options were
introduced to enable users to configure both a GUI tool, and a non-GUI
tool (with fallback if no GUI tool configured), in the same environment.
Unfortunately, the --gui argument introduced to support the selection of
the guitool is still explicit. When using configured tools, there is no
equivalent of the no-tool-configured "propose a GUI tool if we are in a GUI
environment" behavior.
As proposed in <xmqqmtb8jsej.fsf@gitster.g>, introduce new configuration
options, difftool.guiDefault and mergetool.guiDefault, supporting a special
value "auto" which causes the corresponding tool or guitool to be selected
depending on the presence of a non-empty DISPLAY value. Also support "true"
to say "default to the guitool (unless --no-gui is passed on the
commandline)", and "false" as the previous default behavior when these new
configuration options are not specified.
Signed-off-by: Tao Klerks <tao@klerks.biz>
Acked-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-03-18 16:27:43 +01:00
|
|
|
configured under `merge.tool`. This may be autoselected using
|
|
|
|
the configuration variable `mergetool.guiDefault`.
|
2018-10-24 18:25:31 +02:00
|
|
|
|
|
|
|
--no-gui::
|
mergetool: new config guiDefault supports auto-toggling gui by DISPLAY
When no merge.tool or diff.tool is configured or manually selected, the
selection of a default tool is sensitive to the DISPLAY variable; in a
GUI session a gui-specific tool will be proposed if found, and
otherwise a terminal-based one. This "GUI-optimizing" behavior is
important because a GUI can make a huge difference to a user's ability
to understand and correctly complete a non-trivial conflicting merge.
Some time ago the merge.guitool and diff.guitool config options were
introduced to enable users to configure both a GUI tool, and a non-GUI
tool (with fallback if no GUI tool configured), in the same environment.
Unfortunately, the --gui argument introduced to support the selection of
the guitool is still explicit. When using configured tools, there is no
equivalent of the no-tool-configured "propose a GUI tool if we are in a GUI
environment" behavior.
As proposed in <xmqqmtb8jsej.fsf@gitster.g>, introduce new configuration
options, difftool.guiDefault and mergetool.guiDefault, supporting a special
value "auto" which causes the corresponding tool or guitool to be selected
depending on the presence of a non-empty DISPLAY value. Also support "true"
to say "default to the guitool (unless --no-gui is passed on the
commandline)", and "false" as the previous default behavior when these new
configuration options are not specified.
Signed-off-by: Tao Klerks <tao@klerks.biz>
Acked-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-03-18 16:27:43 +01:00
|
|
|
This overrides a previous `-g` or `--gui` setting or
|
|
|
|
`mergetool.guiDefault` configuration and reads the default merge
|
|
|
|
tool from the configured `merge.tool` variable.
|
2018-10-24 18:25:31 +02:00
|
|
|
|
2016-10-08 02:01:30 +02:00
|
|
|
-O<orderfile>::
|
|
|
|
Process files in the order specified in the
|
|
|
|
<orderfile>, which has one shell glob pattern per line.
|
|
|
|
This overrides the `diff.orderFile` configuration variable
|
|
|
|
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
|
|
|
|
use `-O/dev/null`.
|
2016-10-08 01:58:05 +02:00
|
|
|
|
2021-03-13 09:41:33 +01:00
|
|
|
CONFIGURATION
|
|
|
|
-------------
|
vimdiff: add tool documentation
Running 'git {merge,diff}tool --tool-help' now also prints usage
information about the vimdiff tool (and its variants) instead of just
its name.
Two new functions ('diff_cmd_help()' and 'merge_cmd_help()') have been
added to the set of functions that each merge tool (ie. scripts found
inside "mergetools/") can overwrite to provided tool specific
information.
Right now, only 'mergetools/vimdiff' implements these functions, but
other tools are encouraged to do so in the future, specially if they
take configuration options not explained anywhere else (as it is the
case with the 'vimdiff' tool and the new 'layout' option)
Note that the function 'show_tool_names', used in the implementation of
'git mergetool --tool-help', is also used in Documentation/Makefile to
generate the list of allowed values for the configuration variables
'{diff,merge}.{gui,}tool'. Adjust the rule so its output is an Asciidoc
"description list" instead of a plain list, with the tool name as the
item and the newly added tool description as the description.
In addition, a section has been added to
"Documentation/git-mergetool.txt" to explain the new "layout"
configuration option with examples.
Helped-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Fernando Ramos <greenfoo@u92.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-03-30 21:19:08 +02:00
|
|
|
:git-mergetool: 1
|
2022-09-07 10:26:57 +02:00
|
|
|
|
|
|
|
include::includes/cmd-config-section-all.txt[]
|
|
|
|
|
2021-03-13 09:41:33 +01:00
|
|
|
include::config/mergetool.txt[]
|
|
|
|
|
2010-07-18 03:46:48 +02:00
|
|
|
TEMPORARY FILES
|
|
|
|
---------------
|
|
|
|
`git mergetool` creates `*.orig` backup files while resolving merges.
|
|
|
|
These are safe to remove once a file has been merged and its
|
|
|
|
`git mergetool` session has completed.
|
|
|
|
|
|
|
|
Setting the `mergetool.keepBackup` configuration variable to `false`
|
|
|
|
causes `git mergetool` to automatically remove the backup as files
|
|
|
|
are successfully merged.
|
|
|
|
|
vimdiff: add tool documentation
Running 'git {merge,diff}tool --tool-help' now also prints usage
information about the vimdiff tool (and its variants) instead of just
its name.
Two new functions ('diff_cmd_help()' and 'merge_cmd_help()') have been
added to the set of functions that each merge tool (ie. scripts found
inside "mergetools/") can overwrite to provided tool specific
information.
Right now, only 'mergetools/vimdiff' implements these functions, but
other tools are encouraged to do so in the future, specially if they
take configuration options not explained anywhere else (as it is the
case with the 'vimdiff' tool and the new 'layout' option)
Note that the function 'show_tool_names', used in the implementation of
'git mergetool --tool-help', is also used in Documentation/Makefile to
generate the list of allowed values for the configuration variables
'{diff,merge}.{gui,}tool'. Adjust the rule so its output is an Asciidoc
"description list" instead of a plain list, with the tool name as the
item and the newly added tool description as the description.
In addition, a section has been added to
"Documentation/git-mergetool.txt" to explain the new "layout"
configuration option with examples.
Helped-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Fernando Ramos <greenfoo@u92.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-03-30 21:19:08 +02:00
|
|
|
BACKEND SPECIFIC HINTS
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
vimdiff
|
|
|
|
~~~~~~~
|
|
|
|
include::mergetools/vimdiff.txt[]
|
|
|
|
|
2007-03-06 06:05:16 +01:00
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 09:07:32 +02:00
|
|
|
Part of the linkgit:git[1] suite
|