`--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[<key-id>]`::
`--gpg-sign[=<key-id>]`::
`--no-gpg-sign`::
	GPG-sign the resulting merge commit. The _<key-id>_ 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.adoc[]

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

`--compact-summary`::
	Show a compact-summary 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[]

`--verify`::
`--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 or will be added.
ifdef::git-pull[]
+
Only useful when merging.
endif::git-pull[]
