--commit::
--no-commit::
	Perform the merge and commit the result. This option can
	be used to override --no-commit.
+
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.

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

-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].
+
With --no-log do not list one-line descriptions from the
actual commits being merged.

--signoff::
--no-signoff::
	Add Signed-off-by line by the committer at the end of the commit
	log message.  The meaning of a signoff depends on the project,
	but it typically certifies that committer has
	the rights to submit this work under the same license and
	agrees to a Developer Certificate of Origin
	(see http://developercertificate.org/ for more information).
+
With --no-signoff do not add a Signed-off-by line.

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

--no-verify::
	This option bypasses the pre-merge and commit-msg hooks.
	See also linkgit:githooks[5].

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

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