# git-difftool

## NAME



           git-difftool - Show changes using common diff tools
    


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


## GIT



           Part of the git(1) suite
    


* * *