GIT-DIFFTOOL(1) Git Manual GIT-DIFFTOOL(1)

# [NAME](#NAME)

git-difftool - Show changes using common diff tools

# [SYNOPSIS](#SYNOPSIS)

```
git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]
```

# [DESCRIPTION](#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)](/man/os/git/git-diff.1).

# [OPTIONS](#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=&lt;file&gt;**

Start showing the diff for *&lt;file&gt;*, the paths before it will move to the end and output.

**--skip-to=&lt;file&gt;**

Start showing the diff for *&lt;file&gt;*, skipping all the paths before it.

**-t** *&lt;tool&gt;*, **--tool=&lt;tool&gt;**

Use the diff tool specified by *&lt;tool&gt;*. Valid values include emerge, kompare, meld, and vimdiff. Run **git** **difftool** **--tool-help** for the list of valid *&lt;tool&gt;* 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.&lt;tool&gt;.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.&lt;tool&gt;.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** *&lt;command&gt;*, **--extcmd=&lt;command&gt;**

Specify a custom command for viewing diffs. **git-difftool** ignores the configured defaults and runs *&lt;command&gt;* **$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)](/man/os/git/git-diff.1) for the full list of supported options.

# [CONFIGURATION](#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)](/man/os/git/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)](/man/os/git/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.&lt;tool&gt;.cmd** variable is defined.

**diff.guitool**

Controls which diff tool is used by [**git-difftool**(1)](/man/os/git/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.&lt;guitool&gt;.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.&lt;tool&gt;.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=&lt;tool&gt;** option in [**git-difftool**(1)](/man/os/git/git-difftool.1) for more details.

**difftool.&lt;tool&gt;.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)](/man/os/git/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](#SEE_ALSO)

[**git-diff**(1)](/man/os/git/git-diff.1)

Show changes between commits, commit and working tree, etc

[**git-mergetool**(1)](/man/os/git/git-mergetool.1)

Run merge conflict resolution tools to resolve merge conflicts

[**git-config**(1)](/man/os/git/git-config.1)

Get and set repository or global options

# [GIT](#GIT)

Part of the [**git**(1)](/man/os/git/git.1) suite

2026-09-28 Git 2.56.0.1.g02cd7dbd

---

Document: git-difftool(1) from git 2.56.0-r3 (Chainguard OS)
Source: https://kernel.googlesource.com/pub/scm/git/git.git
