--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::
	When 'git fetch' is used with `<src>:<dst>` refspec, it may
	refuse to update the local branch as discussed
ifdef::git-pull[]
	in the `<refspec>` part of the linkgit:git-fetch[1]
	documentation.
endif::git-pull[]
ifndef::git-pull[]
	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. (`--[no-]auto-gc` is a synonym.)
	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.*.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)]::
	This option controls 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::
--jobs=<n>::
	Number of parallel children to be used for all forms of fetching.
+
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.
