`mergetool.<tool>.path`::
	Override the path for the given tool.  This is useful in case
	your tool is not in the `$PATH`.

`mergetool.<tool>.cmd`::
	Specify the command to invoke the specified merge tool.  The
	specified command is evaluated in shell with the following
	variables available: `BASE` is the name of a temporary file
	containing the common base of the files to be merged, if available;
	`LOCAL` is the name of a temporary file containing the contents of
	the file on the current branch; `REMOTE` is the name of a temporary
	file containing the contents of the file from the branch being
	merged; `MERGED` contains the name of the file to which the merge
	tool should write the results of a successful merge.

`mergetool.<tool>.hideResolved`::
	Allows the user to override the global `mergetool.hideResolved` value
	for a specific tool. See `mergetool.hideResolved` for the full
	description.

`mergetool.<tool>.trustExitCode`::
	For a custom merge command, specify whether the exit code of
	the merge command can be used to determine whether the merge was
	successful.  If this is not set to true then the merge target file
	timestamp is checked, and the merge is assumed to have been successful
	if the file has been updated; otherwise, the user is prompted to
	indicate the success of the merge.

`mergetool.meld.hasOutput`::
	Older versions of `meld` do not support the `--output` option.
	Git will attempt to detect whether `meld` supports `--output`
	by inspecting the output of `meld --help`.  Configuring
	`mergetool.meld.hasOutput` will make Git skip these checks and
	use the configured value instead.  Setting `mergetool.meld.hasOutput`
	to `true` tells Git to unconditionally use the `--output` option,
	and `false` avoids using `--output`.

`mergetool.meld.useAutoMerge`::
	When the `--auto-merge` is given, meld will merge all non-conflicting
	parts automatically, highlight the conflicting parts, and wait for
	user decision.  Setting `mergetool.meld.useAutoMerge` to `true` tells
	Git to unconditionally use the `--auto-merge` option with `meld`.
	Setting this value to `auto` makes git detect whether `--auto-merge`
	is supported and will only use `--auto-merge` when available.  A
	value of `false` avoids using `--auto-merge` altogether, and is the
	default value.

`mergetool.<variant>.layout`::
	Configure the split window layout for vimdiff's _<variant>_, which is any of `vimdiff`,
	`nvimdiff`, `gvimdiff`.
	Upon launching `git mergetool` with `--tool=<variant>` (or without `--tool`
	if `merge.tool` is configured as _<variant>_), Git will consult
	`mergetool.<variant>.layout` to determine the tool's layout. If the
	variant-specific configuration is not available, `vimdiff` ' s is used as
	fallback. If that too is not available, a default layout with 4 windows
	will be used.
ifdef::git-mergetool[]
To configure the layout, see the 'BACKEND SPECIFIC HINTS' section.
endif::[]
ifndef::git-mergetool[]
To configure the layout, see the 'BACKEND SPECIFIC HINTS' section in linkgit:git-mergetool[1].
endif::[]

`mergetool.hideResolved`::
	During a merge, Git will automatically resolve as many conflicts as
	possible and write the `$MERGED` file containing conflict markers around
	any conflicts that it cannot resolve; `$LOCAL` and `$REMOTE` normally
	are the versions of the file from before Git's conflict
	resolution. This flag causes `$LOCAL` and `$REMOTE` to be overwritten so
	that only the unresolved conflicts are presented to the merge tool. Can
	be configured per-tool via the `mergetool.<tool>.hideResolved`
	configuration variable. Defaults to `false`.

`mergetool.keepBackup`::
	After performing a merge, the original file with conflict markers
	can be saved as a file with a `.orig` extension.  If this variable
	is set to `false` then this file is not preserved.  Defaults to
	`true` (i.e. keep the backup files).

`mergetool.keepTemporaries`::
	When invoking a custom merge tool, Git uses a set of temporary
	files to pass to the tool. If the tool returns an error and this
	variable is set to `true`, then these temporary files will be
	preserved; otherwise, they will be removed after the tool has
	exited. Defaults to `false`.

`mergetool.writeToTemp`::
	Git writes temporary `BASE`, `LOCAL`, and `REMOTE` versions of
	conflicting files in the worktree by default.  Git will attempt
	to use a temporary directory for these files when set `true`.
	Defaults to `false`.

`mergetool.prompt`::
	Prompt before each invocation of the merge resolution program.

`mergetool.guiDefault`::
	Set `true` to use the `merge.guitool` by default (equivalent to
	specifying the `--gui` argument), or `auto` to select `merge.guitool`
	or `merge.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 `merge.guitool` to be used.
