git-difftool(1)
===============

NAME
----
git-difftool - Show changes using common diff tools

SYNOPSIS
--------
[verse]
'git difftool' [<options>] [<commit> [<commit>]] [--] [<path>...]

DESCRIPTION
-----------
'git difftool' is a Git command that allows you to compare and edit files
between revisions using common diff tools.  'git difftool' is a frontend
to 'git diff' and accepts the same options and arguments. See
linkgit:git-diff[1].

OPTIONS
-------
-d::
--dir-diff::
	Copy the modified files to a temporary location and perform
	a directory diff on them. This mode never prompts before
	launching the diff tool.

-y::
--no-prompt::
	Do not prompt before launching a diff tool.

--prompt::
	Prompt before each invocation of the diff tool.
	This is the default behaviour; the option is provided to
	override any configuration settings.

--rotate-to=<file>::
	Start showing the diff for the given path,
	the paths before it will move to the end and output.

--skip-to=<file>::
	Start showing the diff for the given path, skipping all
	the paths before it.

-t <tool>::
--tool=<tool>::
	Use the diff tool specified by <tool>.  Valid values include
	emerge, kompare, meld, and vimdiff. Run `git difftool --tool-help`
	for the list of valid <tool> settings.
+
If a diff tool is not specified, 'git difftool'
will use the configuration variable `diff.tool`.  If the
configuration variable `diff.tool` is not set, 'git difftool'
will pick a suitable default.
+
You can explicitly provide a full path to the tool by setting the
configuration variable `difftool.<tool>.path`. For example, you
can configure the absolute path to kdiff3 by setting
`difftool.kdiff3.path`. Otherwise, 'git difftool' assumes the
tool is available in PATH.
+
Instead of running one of the known diff tools,
'git difftool' can be customized to run an alternative program
by specifying the command line to invoke in a configuration
variable `difftool.<tool>.cmd`.
+
When 'git difftool' is invoked with this tool (either through the
`-t` or `--tool` option or the `diff.tool` configuration variable)
the configured command line will be invoked with the following
variables available: `$LOCAL` is set to the name of the temporary
file containing the contents of the diff pre-image and `$REMOTE`
is set to the name of the temporary file containing the contents
of the diff post-image.  `$MERGED` is the name of the file which is
being compared. `$BASE` is provided for compatibility
with custom merge tool commands and has the same value as `$MERGED`.

--tool-help::
	Print a list of diff tools that may be used with `--tool`.

--[no-]symlinks::
	'git difftool''s default behavior is to create symlinks to the
	working tree when run in `--dir-diff` mode and the right-hand
	side of the comparison yields the same content as the file in
	the working tree.
+
Specifying `--no-symlinks` instructs 'git difftool' to create copies
instead.  `--no-symlinks` is the default on Windows.

-x <command>::
--extcmd=<command>::
	Specify a custom command for viewing diffs.
	'git-difftool' ignores the configured defaults and runs
	`$command $LOCAL $REMOTE` when this option is specified.
	Additionally, `$BASE` is set in the environment.

-g::
--[no-]gui::
	When 'git-difftool' is invoked with the `-g` or `--gui` option
	the default diff tool will be read from the configured
	`diff.guitool` variable instead of `diff.tool`. This may be
	selected automatically using the configuration variable
	`difftool.guiDefault`. The `--no-gui` option can be used to
	override these settings. If `diff.guitool` is not set, we will
	fallback in the order of `merge.guitool`, `diff.tool`,
	`merge.tool` until a tool is found.

--[no-]trust-exit-code::
	'git-difftool' invokes a diff tool individually on each file.
	Errors reported by the diff tool are ignored by default.
	Use `--trust-exit-code` to make 'git-difftool' exit when an
	invoked diff tool returns a non-zero exit code.
+
'git-difftool' will forward the exit code of the invoked tool when
`--trust-exit-code` is used.

See linkgit:git-diff[1] for the full list of supported options.

CONFIGURATION
-------------
'git difftool' falls back to 'git mergetool' config variables when the
difftool equivalents have not been defined.

include::includes/cmd-config-section-rest.txt[]

include::config/difftool.txt[]

SEE ALSO
--------
linkgit:git-diff[1]::
	 Show changes between commits, commit and working tree, etc

linkgit:git-mergetool[1]::
	Run merge conflict resolution tools to resolve merge conflicts

linkgit:git-config[1]::
	 Get and set repository or global options

GIT
---
Part of the linkgit:git[1] suite
