--commit::
--no-commit::
	Perform the merge and commit the result. This option can
	be used to override --no-commit.
ifdef::git-pull[]
	Only useful when merging.
endif::git-pull[]
+
With --no-commit perform the merge and stop just before creating
a merge commit, to give the user a chance to inspect and further
tweak the merge result before committing.
+
Note that fast-forward updates do not create a merge commit and
therefore there is no way to stop those merges with --no-commit.
Thus, if you want to ensure your branch is not changed or updated
by the merge command, use --no-ff with --no-commit.

--edit::
-e::
--no-edit::
	Invoke an editor before committing successful mechanical merge to
	further edit the auto-generated merge message, so that the user
	can explain and justify the merge. The `--no-edit` option can be
	used to accept the auto-generated message (this is generally
	discouraged).
ifndef::git-pull[]
The `--edit` (or `-e`) option is still useful if you are
giving a draft message with the `-m` option from the command line
and want to edit it in the editor.
endif::git-pull[]
+
Older scripts may depend on the historical behaviour of not allowing the
user to edit the merge log message. They will see an editor opened when
they run `git merge`. To make it easier to adjust such scripts to the
updated behaviour, the environment variable `GIT_MERGE_AUTOEDIT` can be
set to `no` at the beginning of them.

--cleanup=<mode>::
	This option determines how the merge message will be cleaned up before
	committing. See linkgit:git-commit[1] for more details. In addition, if
	the '<mode>' is given a value of `scissors`, scissors will be appended
	to `MERGE_MSG` before being passed on to the commit machinery in the
	case of a merge conflict.

ifdef::git-merge[]
--ff::
--no-ff::
--ff-only::
	Specifies how a merge is handled when the merged-in history is
	already a descendant of the current history.  `--ff` is the
	default unless merging an annotated (and possibly signed) tag
	that is not stored in its natural place in the `refs/tags/`
	hierarchy, in which case `--no-ff` is assumed.
endif::git-merge[]
ifdef::git-pull[]
--ff-only::
	Only update to the new history if there is no divergent local
	history.  This is the default when no method for reconciling
	divergent histories is provided (via the --rebase=* flags).

--ff::
--no-ff::
	When merging rather than rebasing, specifies how a merge is
	handled when the merged-in history is already a descendant of
	the current history.  If merging is requested, `--ff` is the
	default unless merging an annotated (and possibly signed) tag
	that is not stored in its natural place in the `refs/tags/`
	hierarchy, in which case `--no-ff` is assumed.
endif::git-pull[]
+
With `--ff`, when possible resolve the merge as a fast-forward (only
update the branch pointer to match the merged branch; do not create a
merge commit).  When not possible (when the merged-in history is not a
descendant of the current history), create a merge commit.
+
With `--no-ff`, create a merge commit in all cases, even when the merge
could instead be resolved as a fast-forward.
ifdef::git-merge[]
+
With `--ff-only`, resolve the merge as a fast-forward when possible.
When not possible, refuse to merge and exit with a non-zero status.
endif::git-merge[]

-S[<keyid>]::
--gpg-sign[=<keyid>]::
--no-gpg-sign::
	GPG-sign the resulting merge commit. The `keyid` argument is
	optional and defaults to the committer identity; if specified,
	it must be stuck to the option without a space. `--no-gpg-sign`
	is useful to countermand both `commit.gpgSign` configuration variable,
	and earlier `--gpg-sign`.

--log[=<n>]::
--no-log::
	In addition to branch names, populate the log message with
	one-line descriptions from at most <n> actual commits that are being
	merged. See also linkgit:git-fmt-merge-msg[1].
ifdef::git-pull[]
	Only useful when merging.
endif::git-pull[]
+
With --no-log do not list one-line descriptions from the
actual commits being merged.

include::signoff-option.txt[]

--stat::
-n::
--no-stat::
	Show a diffstat at the end of the merge. The diffstat is also
	controlled by the configuration option merge.stat.
+
With -n or --no-stat do not show a diffstat at the end of the
merge.

--squash::
--no-squash::
	Produce the working tree and index state as if a real merge
	happened (except for the merge information), but do not actually
	make a commit, move the `HEAD`, or record `$GIT_DIR/MERGE_HEAD`
	(to cause the next `git commit` command to create a merge
	commit).  This allows you to create a single commit on top of
	the current branch whose effect is the same as merging another
	branch (or more in case of an octopus).
+
With --no-squash perform the merge and commit the result. This
option can be used to override --squash.
+
With --squash, --commit is not allowed, and will fail.
ifdef::git-pull[]
+
Only useful when merging.
endif::git-pull[]

--no-verify::
	This option bypasses the pre-merge and commit-msg hooks.
	See also linkgit:githooks[5].
ifdef::git-pull[]
	Only useful when merging.
endif::git-pull[]

-s <strategy>::
--strategy=<strategy>::
	Use the given merge strategy; can be supplied more than
	once to specify them in the order they should be tried.
	If there is no `-s` option, a built-in list of strategies
	is used instead ('git merge-recursive' when merging a single
	head, 'git merge-octopus' otherwise).

-X <option>::
--strategy-option=<option>::
	Pass merge strategy specific option through to the merge
	strategy.

--verify-signatures::
--no-verify-signatures::
	Verify that the tip commit of the side branch being merged is
	signed with a valid key, i.e. a key that has a valid uid: in the
	default trust model, this means the signing key has been signed by
	a trusted key.  If the tip commit of the side branch is not signed
	with a valid key, the merge is aborted.
ifdef::git-pull[]
+
Only useful when merging.
endif::git-pull[]

--summary::
--no-summary::
	Synonyms to --stat and --no-stat; these are deprecated and will be
	removed in the future.

ifndef::git-pull[]
-q::
--quiet::
	Operate quietly. Implies --no-progress.

-v::
--verbose::
	Be verbose.

--progress::
--no-progress::
	Turn progress on/off explicitly. If neither is specified,
	progress is shown if standard error is connected to a terminal.
	Note that not all merge strategies may support progress
	reporting.

endif::git-pull[]

--autostash::
--no-autostash::
	Automatically create a temporary stash entry before the operation
	begins, record it in the special ref `MERGE_AUTOSTASH`
	and apply it after the operation ends.  This means
	that you can run the operation on a dirty worktree.  However, use
	with care: the final stash application after a successful
	merge might result in non-trivial conflicts.

--allow-unrelated-histories::
	By default, `git merge` command refuses to merge histories
	that do not share a common ancestor.  This option can be
	used to override this safety when merging histories of two
	projects that started their lives independently. As that is
	a very rare occasion, no configuration variable to enable
	this by default exists and will not be added.
ifdef::git-pull[]
+
Only useful when merging.
endif::git-pull[]
