`--all`::
`--no-all`::
	Fetch all remotes, except for the ones that have the
	`remote.<name>.skipFetchAll` configuration variable set.
	This overrides the configuration variable `fetch.all`.

`-a`::
`--append`::
	Append ref names and object names of fetched refs to the
	existing contents of `.git/FETCH_HEAD`.  Without this
	option old data in `.git/FETCH_HEAD` will be overwritten.

`--atomic`::
	Use an atomic transaction to update local refs. Either all refs are
	updated, or on error, no refs are updated.

`--depth=<depth>`::
	Limit fetching to the specified number of commits from the tip of
	each remote branch history. If fetching to a 'shallow' repository
	created by `git clone` with `--depth=<depth>` option (see
	linkgit:git-clone[1]), deepen or shorten the history to the specified
	number of commits. Tags for the deepened commits are not fetched.

`--deepen=<depth>`::
	Similar to `--depth`, except it specifies the number of commits
	from the current shallow boundary instead of from the tip of
	each remote branch history.

`--shallow-since=<date>`::
	Deepen or shorten the history of a shallow repository to
	include all reachable commits after _<date>_.

`--shallow-exclude=<ref>`::
	Deepen or shorten the history of a shallow repository to
	exclude commits reachable from a specified remote branch or tag.
	This option can be specified multiple times.

`--unshallow`::
	If the source repository is complete, convert a shallow
	repository to a complete one, removing all the limitations
	imposed by shallow repositories.
+
If the source repository is shallow, fetch as much as possible so that
the current repository has the same history as the source repository.

`--update-shallow`::
	By default when fetching from a shallow repository,
	`git fetch` refuses refs that require updating
	`.git/shallow`. This option updates `.git/shallow` and accepts such
	refs.

`--negotiation-restrict=(<commit>|<glob>)`::
`--negotiation-tip=(<commit>|<glob>)`::
	By default, Git will report, to the server, commits reachable
	from all local refs to find common commits in an attempt to
	reduce the size of the to-be-received packfile. If specified,
	Git will only report commits reachable from the given tips.
	This is useful to speed up fetches when the user knows which
	local ref is likely to have commits in common with the
	upstream ref being fetched.
+
`--negotiation-restrict` is the preferred name for this option;
`--negotiation-tip` is accepted as a synonym.
+
This option may be specified more than once; if so, Git will report
commits reachable from any of the given commits.
+
The argument to this option may be a glob on ref names, a ref, or the (possibly
abbreviated) SHA-1 of a commit. Specifying a glob is equivalent to specifying
this option multiple times, one for each matching ref name.
+
See also the `fetch.negotiationAlgorithm` and `push.negotiate`
configuration variables documented in linkgit:git-config[1], and the
`--negotiate-only` option below.

`--negotiation-include=(<commit>|<glob>)`::
	Ensure that the commits at the given tips are always sent as "have"
	lines during fetch negotiation, regardless of what the negotiation
	algorithm selects.  This is useful to guarantee that common
	history reachable from specific refs is always considered, even
	when `--negotiation-restrict` restricts the set of tips or when
	the negotiation algorithm would otherwise skip them.
+
This option may be specified more than once; if so, each commit is sent
unconditionally.
+
The argument may be an exact ref name (e.g. `refs/heads/release`), an
object hash, or a glob pattern (e.g. `refs/heads/release/{asterisk}`).
The pattern syntax is the same as for `--negotiation-restrict`.
+
If `--negotiation-restrict` is used, the have set is first restricted by
that option and then increased to include the tips specified by
`--negotiation-include`.
+
If this option is not specified on the command line, then any
`remote.<name>.negotiationInclude` config values for the current remote
are used instead.

`--negotiate-only`::
	Do not fetch anything from the server, and instead print the
	ancestors of the provided `--negotiation-restrict=` arguments,
	which we have in common with the server.
+
This is incompatible with `--recurse-submodules=(yes|on-demand)`.
Internally this is used to implement the `push.negotiate` option, see
linkgit:git-config[1].

`--dry-run`::
	Show what would be done, without making any changes.

`--porcelain`::
	Print the output to standard output in an easy-to-parse format for
	scripts. See section OUTPUT in linkgit:git-fetch[1] for details.
+
This is incompatible with `--recurse-submodules=(yes|on-demand)` and takes
precedence over the `fetch.output` config option.

`--filter=<filter-spec>`::
	Use the partial clone feature and request that the server sends
	a subset of reachable objects according to a given object filter.
	When using `--filter`, the supplied _<filter-spec>_ is used for
	the partial fetch.
+
If `--filter=auto` is used, the filter specification is determined
automatically by combining the filter specifications advertised by
the server for the promisor remotes that the client accepts (see
linkgit:gitprotocol-v2[5] and the `promisor.acceptFromServer`
configuration option in linkgit:git-config[1]).
+
For details on all other available filter specifications, see the
`--filter=<filter-spec>` option in linkgit:git-rev-list[1].
+
For example, `--filter=blob:none` will filter out all blobs (file
contents) until needed by Git. Also, `--filter=blob:limit=<size>` will
filter out all blobs of size at least _<size>_.

ifndef::git-pull[]
`--write-fetch-head`::
`--no-write-fetch-head`::
	Write the list of remote refs fetched in the `FETCH_HEAD`
	file directly under `$GIT_DIR`.  This is the default.
	Passing `--no-write-fetch-head` from the command line tells
	Git not to write the file.  Under `--dry-run` option, the
	file is never written.
endif::git-pull[]

`-f`::
`--force`::
ifdef::git-pull[]
When `git fetch` is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed
in the _<refspec>_ part of the linkgit:git-fetch[1]
documentation.
endif::git-pull[]
ifndef::git-pull[]
When `git fetch` is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed in the _<refspec>_ part below.
endif::git-pull[]
This option overrides that check.

`-k`::
`--keep`::
	Keep downloaded pack.

ifndef::git-pull[]
`--multiple`::
	Allow several _<repository>_ and _<group>_ arguments to be
	specified. No __<refspec>__s may be specified.

`--auto-maintenance`::
`--no-auto-maintenance`::
`--auto-gc`::
`--no-auto-gc`::
	Run `git maintenance run --auto` at the end to perform automatic
	repository maintenance if needed.
	This is enabled by default.

`--write-commit-graph`::
`--no-write-commit-graph`::
	Write a commit-graph after fetching. This overrides the config
	setting `fetch.writeCommitGraph`.
endif::git-pull[]

`--prefetch`::
	Modify the configured refspec to place all refs into the
	`refs/prefetch/` namespace. See the `prefetch` task in
	linkgit:git-maintenance[1].

`-p`::
`--prune`::
	Before fetching, remove any remote-tracking references that no
	longer exist on the remote.  Tags are not subject to pruning
	if they are fetched only because of the default tag
	auto-following or due to a `--tags` option.  However, if tags
	are fetched due to an explicit refspec (either on the command
	line or in the remote configuration, for example if the remote
	was cloned with the `--mirror` option), then they are also
	subject to pruning. Supplying `--prune-tags` is a shorthand for
	providing the tag refspec.
ifndef::git-pull[]
+
See the PRUNING section below for more details.

`-P`::
`--prune-tags`::
	Before fetching, remove any local tags that no longer exist on
	the remote if `--prune` is enabled. This option should be used
	more carefully, unlike `--prune` it will remove any local
	references (local tags) that have been created. This option is
	a shorthand for providing the explicit tag refspec along with
	`--prune`, see the discussion about that in its documentation.
+
See the PRUNING section below for more details.

endif::git-pull[]

ifndef::git-pull[]
`-n`::
endif::git-pull[]
`--no-tags`::
	By default, tags that point at objects that are downloaded
	from the remote repository are fetched and stored locally.
	This option disables this automatic tag following. The default
	behavior for a remote may be specified with the `remote.<name>.tagOpt`
	setting. See linkgit:git-config[1].

ifndef::git-pull[]
`--refetch`::
	Instead of negotiating with the server to avoid transferring commits and
	associated objects that are already present locally, this option fetches
	all objects as a fresh clone would. Use this to reapply a partial clone
	filter from configuration or using `--filter=` when the filter
	definition has changed. Automatic post-fetch maintenance will perform
	object database pack consolidation to remove any duplicate objects.
endif::git-pull[]

`--refmap=<refspec>`::
	When fetching refs listed on the command line, use the
	specified refspec (can be given more than once) to map the
	refs to remote-tracking branches, instead of the values of
	`remote.<name>.fetch` configuration variables for the remote
	repository.  Providing an empty _<refspec>_ to the
	`--refmap` option causes Git to ignore the configured
	refspecs and rely entirely on the refspecs supplied as
	command-line arguments. See section on "Configured Remote-tracking
	Branches" for details.

`-t`::
`--tags`::
	Fetch all tags from the remote (i.e., fetch remote tags
	`refs/tags/*` into local tags with the same name), in addition
	to whatever else would otherwise be fetched.  Using this
	option alone does not subject tags to pruning, even if `--prune`
	is used (though tags may be pruned anyway if they are also the
	destination of an explicit refspec; see `--prune`).

ifndef::git-pull[]
`--recurse-submodules[=(yes|on-demand|no)]`::
	Control if and under what conditions new commits of
	submodules should be fetched too. When recursing through submodules,
	`git fetch` always attempts to fetch "changed" submodules, that is, a
	submodule that has commits that are referenced by a newly fetched
	superproject commit but are missing in the local submodule clone. A
	changed submodule can be fetched as long as it is present locally e.g.
	in `$GIT_DIR/modules/` (see linkgit:gitsubmodules[7]); if the upstream
	adds a new submodule, that submodule cannot be fetched until it is
	cloned e.g. by `git submodule update`.
+
When set to `on-demand`, only changed submodules are fetched. When set
to `yes`, all populated submodules are fetched and submodules that are
both unpopulated and changed are fetched. When set to `no`, submodules
are never fetched.
+
When unspecified, this uses the value of `fetch.recurseSubmodules` if it
is set (see linkgit:git-config[1]), defaulting to `on-demand` if unset.
When this option is used without any value, it defaults to `yes`.
endif::git-pull[]

`-j <n>`::
`--jobs=<n>`::
	Parallelize all forms of fetching up to _<n>_ jobs at a time.
+
A value of 0 will use some reasonable default.
+
If the `--multiple` option was specified, the different remotes will be fetched
in parallel. If multiple submodules are fetched, they will be fetched in
parallel. To control them independently, use the config settings
`fetch.parallel` and `submodule.fetchJobs` (see linkgit:git-config[1]).
+
Typically, parallel recursive and multi-remote fetches will be faster. By
default fetches are performed sequentially, not in parallel.

ifndef::git-pull[]
`--no-recurse-submodules`::
	Disable recursive fetching of submodules (this has the same effect as
	using the `--recurse-submodules=no` option).
endif::git-pull[]

`--set-upstream`::
	If the remote is fetched successfully, add upstream
	(tracking) reference, used by argument-less
	linkgit:git-pull[1] and other commands. For more information,
	see `branch.<name>.merge` and `branch.<name>.remote` in
	linkgit:git-config[1].

ifndef::git-pull[]
`--submodule-prefix=<path>`::
	Prepend _<path>_ to paths printed in informative messages
	such as "Fetching submodule foo".  This option is used
	internally when recursing over submodules.

`--recurse-submodules-default=(yes|on-demand)`::
	This option is used internally to temporarily provide a
	non-negative default value for the `--recurse-submodules`
	option.  All other methods of configuring fetch's submodule
	recursion (such as settings in linkgit:gitmodules[5] and
	linkgit:git-config[1]) override this option, as does
	specifying `--[no-]recurse-submodules` directly.

`-u`::
`--update-head-ok`::
	By default `git fetch` refuses to update the head which
	corresponds to the current branch.  This flag disables the
	check.  This is purely for the internal use for `git pull`
	to communicate with `git fetch`, and unless you are
	implementing your own Porcelain you are not supposed to
	use it.
endif::git-pull[]

`--upload-pack <upload-pack>`::
	When given, and the repository to fetch from is handled
	by `git fetch-pack`, `--exec=<upload-pack>` is passed to
	the command to specify non-default path for the command
	run on the other end.

ifndef::git-pull[]
`-q`::
`--quiet`::
	Pass `--quiet` to `git-fetch-pack` and silence any other internally
	used git commands. Progress is not reported to the standard error
	stream.

`-v`::
`--verbose`::
	Be verbose.
endif::git-pull[]

`--progress`::
	Progress status is reported on the standard error stream
	by default when it is attached to a terminal, unless `-q`
	is specified. This flag forces progress status even if the
	standard error stream is not directed to a terminal.

`-o <option>`::
`--server-option=<option>`::
	Transmit the given string to the server when communicating using
	protocol version 2.  The given string must not contain a _NUL_ or _LF_
	character.  The server's handling of server options, including
	unknown ones, is server-specific.
	When multiple `--server-option=<option>` are given, they are all
	sent to the other side in the order listed on the command line.
	When no `--server-option=<option>` is given from the command line,
	the values of configuration variable `remote.<name>.serverOption`
	are used instead.

`--show-forced-updates`::
	By default, git checks if a branch is force-updated during
	fetch. This can be disabled through `fetch.showForcedUpdates`, but
	the `--show-forced-updates` option guarantees this check occurs.
	See linkgit:git-config[1].

`--no-show-forced-updates`::
	By default, git checks if a branch is force-updated during
	fetch. Pass `--no-show-forced-updates` or set `fetch.showForcedUpdates`
	to false to skip this check for performance reasons. If used during
	`git-pull` the `--ff-only` option will still check for forced updates
	before attempting a fast-forward update. See linkgit:git-config[1].

`-4`::
`--ipv4`::
	Use IPv4 addresses only, ignoring IPv6 addresses.

`-6`::
`--ipv6`::
	Use IPv6 addresses only, ignoring IPv4 addresses.
