`--all`::
`--no-all`::
	Fetch all remotes, except for the ones that has 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-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.
+
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.

`--negotiate-only`::
	Do not fetch anything from the server, and instead print the
	ancestors of the provided `--negotiation-tip=` 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.

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