merge.conflictStyle::
	Specify the style in which conflicted hunks are written out to
	working tree files upon merge.  The default is "merge", which
	shows a `<<<<<<<` conflict marker, changes made by one side,
	a `=======` marker, changes made by the other side, and then
	a `>>>>>>>` marker.  An alternate style, "diff3", adds a `|||||||`
	marker and the original text before the `=======` marker.  The
	"merge" style tends to produce smaller conflict regions than diff3,
	both because of the exclusion of the original text, and because
	when a subset of lines match on the two sides they are just pulled
	out of the conflict region.  Another alternate style, "zdiff3", is
	similar to diff3 but removes matching lines on the two sides from
	the conflict region when those matching lines appear near either
	the beginning or end of a conflict region.

merge.defaultToUpstream::
	If merge is called without any commit argument, merge the upstream
	branches configured for the current branch by using their last
	observed values stored in their remote-tracking branches.
	The values of the `branch.<current branch>.merge` that name the
	branches at the remote named by `branch.<current branch>.remote`
	are consulted, and then they are mapped via `remote.<remote>.fetch`
	to their corresponding remote-tracking branches, and the tips of
	these tracking branches are merged. Defaults to true.

merge.ff::
	By default, Git does not create an extra merge commit when merging
	a commit that is a descendant of the current commit. Instead, the
	tip of the current branch is fast-forwarded. When set to `false`,
	this variable tells Git to create an extra merge commit in such
	a case (equivalent to giving the `--no-ff` option from the command
	line). When set to `only`, only such fast-forward merges are
	allowed (equivalent to giving the `--ff-only` option from the
	command line).

merge.verifySignatures::
	If true, this is equivalent to the --verify-signatures command
	line option. See linkgit:git-merge[1] for details.

include::fmt-merge-msg.txt[]

merge.renameLimit::
	The number of files to consider in the exhaustive portion of
	rename detection during a merge.  If not specified, defaults
	to the value of diff.renameLimit.  If neither
	merge.renameLimit nor diff.renameLimit are specified,
	currently defaults to 7000.  This setting has no effect if
	rename detection is turned off.

merge.renames::
	Whether Git detects renames.  If set to "false", rename detection
	is disabled. If set to "true", basic rename detection is enabled.
	Defaults to the value of diff.renames.

merge.directoryRenames::
	Whether Git detects directory renames, affecting what happens at
	merge time to new files added to a directory on one side of
	history when that directory was renamed on the other side of
	history.  If merge.directoryRenames is set to "false", directory
	rename detection is disabled, meaning that such new files will be
	left behind in the old directory.  If set to "true", directory
	rename detection is enabled, meaning that such new files will be
	moved into the new directory.  If set to "conflict", a conflict
	will be reported for such paths.  If merge.renames is false,
	merge.directoryRenames is ignored and treated as false.  Defaults
	to "conflict".

merge.renormalize::
	Tell Git that canonical representation of files in the
	repository has changed over time (e.g. earlier commits record
	text files with CRLF line endings, but recent ones use LF line
	endings).  In such a repository, Git can convert the data
	recorded in commits to a canonical form before performing a
	merge to reduce unnecessary conflicts.  For more information,
	see section "Merging branches with differing checkin/checkout
	attributes" in linkgit:gitattributes[5].

merge.stat::
	Whether to print the diffstat between ORIG_HEAD and the merge result
	at the end of the merge.  True by default.

merge.autoStash::
	When set to true, automatically create a temporary stash entry
	before the operation begins, and apply it after the operation
	ends.  This means that you can run merge on a dirty worktree.
	However, use with care: the final stash application after a
	successful merge might result in non-trivial conflicts.
	This option can be overridden by the `--no-autostash` and
	`--autostash` options of linkgit:git-merge[1].
	Defaults to false.

merge.tool::
	Controls which merge tool is used by linkgit:git-mergetool[1].
	The list below shows the valid built-in values.
	Any other value is treated as a custom merge tool and requires
	that a corresponding mergetool.<tool>.cmd variable is defined.

merge.guitool::
	Controls which merge tool is used by linkgit:git-mergetool[1] when the
	-g/--gui flag is specified. The list below shows the valid built-in values.
	Any other value is treated as a custom merge tool and requires that a
	corresponding mergetool.<guitool>.cmd variable is defined.

include::../mergetools-merge.txt[]

merge.verbosity::
	Controls the amount of output shown by the recursive merge
	strategy.  Level 0 outputs nothing except a final error
	message if conflicts were detected. Level 1 outputs only
	conflicts, 2 outputs conflicts and file changes.  Level 5 and
	above outputs debugging information.  The default is level 2.
	Can be overridden by the `GIT_MERGE_VERBOSITY` environment variable.

merge.<driver>.name::
	Defines a human-readable name for a custom low-level
	merge driver.  See linkgit:gitattributes[5] for details.

merge.<driver>.driver::
	Defines the command that implements a custom low-level
	merge driver.  See linkgit:gitattributes[5] for details.

merge.<driver>.recursive::
	Names a low-level merge driver to be used when
	performing an internal merge between common ancestors.
	See linkgit:gitattributes[5] for details.
