<repository>::
	The "remote" repository that is the source of a fetch
	or pull operation.  This parameter can be either a URL
	(see the section <<URLS,GIT URLS>> below) or the name
	of a remote (see the section <<REMOTES,REMOTES>> below).

ifndef::git-pull[]
<group>::
	A name referring to a list of repositories as the value
	of remotes.<group> in the configuration file.
	(See linkgit:git-config[1]).
endif::git-pull[]

<refspec>::
	Specifies which refs to fetch and which local refs to update.
	When no <refspec>s appear on the command line, the refs to fetch
	are read from `remote.<repository>.fetch` variables instead
ifndef::git-pull[]
	(see <<CRTB,CONFIGURED REMOTE-TRACKING BRANCHES>> below).
endif::git-pull[]
ifdef::git-pull[]
	(see linkgit:git-fetch[1]).
endif::git-pull[]
+
The format of a <refspec> parameter is an optional plus
`+`, followed by the source <src>, followed
by a colon `:`, followed by the destination ref <dst>.
The colon can be omitted when <dst> is empty.  <src> is
typically a ref, but it can also be a fully spelled hex object
name.
+
`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`;
it requests fetching everything up to the given tag.
+
The remote ref that matches <src>
is fetched, and if <dst> is not an empty string, an attempt
is made to update the local ref that matches it.
+
Whether that update is allowed without `--force` depends on the ref
namespace it's being fetched to, the type of object being fetched, and
whether the update is considered to be a fast-forward. Generally, the
same rules apply for fetching as when pushing, see the `<refspec>...`
section of linkgit:git-push[1] for what those are. Exceptions to those
rules particular to 'git fetch' are noted below.
+
Until Git version 2.20, and unlike when pushing with
linkgit:git-push[1], any updates to `refs/tags/*` would be accepted
without `+` in the refspec (or `--force`). The receiving promiscuously
considered all tag updates from a remote to be forced fetches.  Since
Git version 2.20, fetching to update `refs/tags/*` work the same way
as when pushing. I.e. any updates will be rejected without `+` in the
refspec (or `--force`).
+
Unlike when pushing with linkgit:git-push[1], any updates outside of
`refs/{tags,heads}/*` will be accepted without `+` in the refspec (or
`--force`), whether that's swapping e.g. a tree object for a blob, or
a commit for another commit that's doesn't have the previous commit as
an ancestor etc.
+
Unlike when pushing with linkgit:git-push[1], there is no
configuration which'll amend these rules, and nothing like a
`pre-fetch` hook analogous to the `pre-receive` hook.
+
As with pushing with linkgit:git-push[1], all of the rules described
above about what's not allowed as an update can be overridden by
adding an the optional leading `+` to a refspec (or using `--force`
command line option). The only exception to this is that no amount of
forcing will make the `refs/heads/*` namespace accept a non-commit
object.
+
[NOTE]
When the remote branch you want to fetch is known to
be rewound and rebased regularly, it is expected that
its new tip will not be descendant of its previous tip
(as stored in your remote-tracking branch the last time
you fetched).  You would want
to use the `+` sign to indicate non-fast-forward updates
will be needed for such branches.  There is no way to
determine or declare that a branch will be made available
in a repository with this behavior; the pulling user simply
must know this is the expected usage pattern for a branch.
ifdef::git-pull[]
+
[NOTE]
There is a difference between listing multiple <refspec>
directly on 'git pull' command line and having multiple
`remote.<repository>.fetch` entries in your configuration
for a <repository> and running a
'git pull' command without any explicit <refspec> parameters.
<refspec>s listed explicitly on the command line are always
merged into the current branch after fetching.  In other words,
if you list more than one remote ref, 'git pull' will create
an Octopus merge.  On the other hand, if you do not list any
explicit <refspec> parameter on the command line, 'git pull'
will fetch all the <refspec>s it finds in the
`remote.<repository>.fetch` configuration and merge
only the first <refspec> found into the current branch.
This is because making an
Octopus from remote refs is rarely done, while keeping track
of multiple remote heads in one-go by fetching more than one
is often useful.
endif::git-pull[]
