git-difftool - Man Page

Show changes using common diff tools

Examples (TL;DR)

Synopsis

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 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 <file>, the paths before it will move to the end and output​.

--skip-to=<file>

Start showing the diff for <file>, 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​.

--symlinks,  --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,  --gui,  --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​.

--trust-exit-code,  --no-trust-exit-code

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 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​.

Everything above this line in this section isn’t included from the git-config(1) documentation​. The content that follows is the same as what’s found there:

diff​.tool

Controls which diff tool is used by git-difftool(1)​. This variable overrides the value configured in merge​.tool​. The list below shows the valid built-in values​. Any other value is treated as a custom diff tool and requires that a corresponding difftool​.<tool>​.cmd variable is defined​.

diff​.guitool

Controls which diff tool is used by git-difftool(1) when the -g/--gui flag is specified​. This variable overrides the value configured in merge​.guitool​. The list below shows the valid built-in values​. Any other value is treated as a custom diff tool and requires that a corresponding difftool​.<guitool>​.cmd variable is defined​.

araxis

Use Araxis Merge (requires a graphical session)

bc

Use Beyond Compare (requires a graphical session)

bc3

Use Beyond Compare (requires a graphical session)

bc4

Use Beyond Compare (requires a graphical session)

codecompare

Use Code Compare (requires a graphical session)

deltawalker

Use DeltaWalker (requires a graphical session)

diffmerge

Use DiffMerge (requires a graphical session)

diffuse

Use Diffuse (requires a graphical session)

ecmerge

Use ECMerge (requires a graphical session)

emerge

Use Emacs' Emerge

examdiff

Use ExamDiff Pro (requires a graphical session)

guiffy

Use Guiffy’s Diff Tool (requires a graphical session)

gvimdiff

Use gVim (requires a graphical session)

kdiff3

Use KDiff3 (requires a graphical session)

kompare

Use Kompare (requires a graphical session)

meld

Use Meld (requires a graphical session)

nvimdiff

Use Neovim

opendiff

Use FileMerge (requires a graphical session)

p4merge

Use HelixCore P4Merge (requires a graphical session)

smerge

Use Sublime Merge (requires a graphical session)

tkdiff

Use TkDiff (requires a graphical session)

vimdiff

Use Vim

vscode

Use Visual Studio Code (requires a graphical session)

winmerge

Use WinMerge (requires a graphical session)

xxdiff

Use xxdiff (requires a graphical session)

difftool​.<tool>​.cmd

Specify the command to invoke the specified diff tool​. The specified command is evaluated in shell 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​.

See the --tool=<tool> option in git-difftool(1) for more details​.

difftool​.<tool>​.path

Override the path for the given tool​. This is useful in case your tool is not in the PATH​.

difftool​.trustExitCode

Exit difftool if the invoked diff tool returns a non-zero exit status​.

See the --trust-exit-code option in git-difftool(1) for more details​.

difftool​.prompt

Prompt before each invocation of the diff tool​.

difftool​.guiDefault

Set true to use the diff​.guitool by default (equivalent to specifying the --gui argument), or auto to select diff​.guitool or diff​.tool depending on the presence of a DISPLAY environment variable value​. The default is false, where the --gui argument must be provided explicitly for the diff​.guitool to be used​.

See Also

git-diff(1)

Show changes between commits, commit and working tree, etc

git-mergetool(1)

Run merge conflict resolution tools to resolve merge conflicts

git-config(1)

Get and set repository or global options

Git

Part of the git(1) suite

Info

09/28/2026 Git 2.56.0 Git Manual