--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::
	By default, the pre-merge and commit-msg hooks are run.
	When `--no-verify` is given, these are bypassed.
	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 (`ort` when merging a single head,
	`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 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[]
