1GIT-FETCH(1)                      Git Manual                      GIT-FETCH(1)
2
3
4

NAME

6       git-fetch - Download objects and refs from another repository
7

SYNOPSIS

9       git fetch [<options>] [<repository> [<refspec>...]]
10       git fetch [<options>] <group>
11       git fetch --multiple [<options>] [(<repository> | <group>)...]
12       git fetch --all [<options>]
13

DESCRIPTION

15       Fetch branches and/or tags (collectively, "refs") from one or more
16       other repositories, along with the objects necessary to complete their
17       histories. Remote-tracking branches are updated (see the description of
18       <refspec> below for ways to control this behavior).
19
20       By default, any tag that points into the histories being fetched is
21       also fetched; the effect is to fetch tags that point at branches that
22       you are interested in. This default behavior can be changed by using
23       the --tags or --no-tags options or by configuring remote.<name>.tagOpt.
24       By using a refspec that fetches tags explicitly, you can fetch tags
25       that do not point into branches you are interested in as well.
26
27       git fetch can fetch from either a single named repository or URL, or
28       from several repositories at once if <group> is given and there is a
29       remotes.<group> entry in the configuration file. (See git-config(1)).
30
31       When no remote is specified, by default the origin remote will be used,
32       unless there’s an upstream branch configured for the current branch.
33
34       The names of refs that are fetched, together with the object names they
35       point at, are written to .git/FETCH_HEAD. This information may be used
36       by scripts or other git commands, such as git-pull(1).
37

OPTIONS

39       --all
40           Fetch all remotes.
41
42       -a, --append
43           Append ref names and object names of fetched refs to the existing
44           contents of .git/FETCH_HEAD. Without this option old data in
45           .git/FETCH_HEAD will be overwritten.
46
47       --depth=<depth>
48           Limit fetching to the specified number of commits from the tip of
49           each remote branch history. If fetching to a shallow repository
50           created by git clone with --depth=<depth> option (see git-
51           clone(1)), deepen or shorten the history to the specified number of
52           commits. Tags for the deepened commits are not fetched.
53
54       --deepen=<depth>
55           Similar to --depth, except it specifies the number of commits from
56           the current shallow boundary instead of from the tip of each remote
57           branch history.
58
59       --shallow-since=<date>
60           Deepen or shorten the history of a shallow repository to include
61           all reachable commits after <date>.
62
63       --shallow-exclude=<revision>
64           Deepen or shorten the history of a shallow repository to exclude
65           commits reachable from a specified remote branch or tag. This
66           option can be specified multiple times.
67
68       --unshallow
69           If the source repository is complete, convert a shallow repository
70           to a complete one, removing all the limitations imposed by shallow
71           repositories.
72
73           If the source repository is shallow, fetch as much as possible so
74           that the current repository has the same history as the source
75           repository.
76
77       --update-shallow
78           By default when fetching from a shallow repository, git fetch
79           refuses refs that require updating .git/shallow. This option
80           updates .git/shallow and accept such refs.
81
82       --negotiation-tip=<commit|glob>
83           By default, Git will report, to the server, commits reachable from
84           all local refs to find common commits in an attempt to reduce the
85           size of the to-be-received packfile. If specified, Git will only
86           report commits reachable from the given tips. This is useful to
87           speed up fetches when the user knows which local ref is likely to
88           have commits in common with the upstream ref being fetched.
89
90           This option may be specified more than once; if so, Git will report
91           commits reachable from any of the given commits.
92
93           The argument to this option may be a glob on ref names, a ref, or
94           the (possibly abbreviated) SHA-1 of a commit. Specifying a glob is
95           equivalent to specifying this option multiple times, one for each
96           matching ref name.
97
98           See also the fetch.negotiationAlgorithm configuration variable
99           documented in git-config(1).
100
101       --dry-run
102           Show what would be done, without making any changes.
103
104       --[no-]write-fetch-head
105           Write the list of remote refs fetched in the FETCH_HEAD file
106           directly under $GIT_DIR. This is the default. Passing
107           --no-write-fetch-head from the command line tells Git not to write
108           the file. Under --dry-run option, the file is never written.
109
110       -f, --force
111           When git fetch is used with <src>:<dst> refspec it may refuse to
112           update the local branch as discussed in the <refspec> part below.
113           This option overrides that check.
114
115       -k, --keep
116           Keep downloaded pack.
117
118       --multiple
119           Allow several <repository> and <group> arguments to be specified.
120           No <refspec>s may be specified.
121
122       --[no-]auto-maintenance, --[no-]auto-gc
123           Run git maintenance run --auto at the end to perform automatic
124           repository maintenance if needed. (--[no-]auto-gc is a synonym.)
125           This is enabled by default.
126
127       --[no-]write-commit-graph
128           Write a commit-graph after fetching. This overrides the config
129           setting fetch.writeCommitGraph.
130
131       -p, --prune
132           Before fetching, remove any remote-tracking references that no
133           longer exist on the remote. Tags are not subject to pruning if they
134           are fetched only because of the default tag auto-following or due
135           to a --tags option. However, if tags are fetched due to an explicit
136           refspec (either on the command line or in the remote configuration,
137           for example if the remote was cloned with the --mirror option),
138           then they are also subject to pruning. Supplying --prune-tags is a
139           shorthand for providing the tag refspec.
140
141           See the PRUNING section below for more details.
142
143       -P, --prune-tags
144           Before fetching, remove any local tags that no longer exist on the
145           remote if --prune is enabled. This option should be used more
146           carefully, unlike --prune it will remove any local references
147           (local tags) that have been created. This option is a shorthand for
148           providing the explicit tag refspec along with --prune, see the
149           discussion about that in its documentation.
150
151           See the PRUNING section below for more details.
152
153       -n, --no-tags
154           By default, tags that point at objects that are downloaded from the
155           remote repository are fetched and stored locally. This option
156           disables this automatic tag following. The default behavior for a
157           remote may be specified with the remote.<name>.tagOpt setting. See
158           git-config(1).
159
160       --refmap=<refspec>
161           When fetching refs listed on the command line, use the specified
162           refspec (can be given more than once) to map the refs to
163           remote-tracking branches, instead of the values of remote.*.fetch
164           configuration variables for the remote repository. Providing an
165           empty <refspec> to the --refmap option causes Git to ignore the
166           configured refspecs and rely entirely on the refspecs supplied as
167           command-line arguments. See section on "Configured Remote-tracking
168           Branches" for details.
169
170       -t, --tags
171           Fetch all tags from the remote (i.e., fetch remote tags refs/tags/*
172           into local tags with the same name), in addition to whatever else
173           would otherwise be fetched. Using this option alone does not
174           subject tags to pruning, even if --prune is used (though tags may
175           be pruned anyway if they are also the destination of an explicit
176           refspec; see --prune).
177
178       --recurse-submodules[=yes|on-demand|no]
179           This option controls if and under what conditions new commits of
180           populated submodules should be fetched too. It can be used as a
181           boolean option to completely disable recursion when set to no or to
182           unconditionally recurse into all populated submodules when set to
183           yes, which is the default when this option is used without any
184           value. Use on-demand to only recurse into a populated submodule
185           when the superproject retrieves a commit that updates the
186           submodule’s reference to a commit that isn’t already in the local
187           submodule clone. By default, on-demand is used, unless
188           fetch.recurseSubmodules is set (see git-config(1)).
189
190       -j, --jobs=<n>
191           Number of parallel children to be used for all forms of fetching.
192
193           If the --multiple option was specified, the different remotes will
194           be fetched in parallel. If multiple submodules are fetched, they
195           will be fetched in parallel. To control them independently, use the
196           config settings fetch.parallel and submodule.fetchJobs (see git-
197           config(1)).
198
199           Typically, parallel recursive and multi-remote fetches will be
200           faster. By default fetches are performed sequentially, not in
201           parallel.
202
203       --no-recurse-submodules
204           Disable recursive fetching of submodules (this has the same effect
205           as using the --recurse-submodules=no option).
206
207       --set-upstream
208           If the remote is fetched successfully, add upstream (tracking)
209           reference, used by argument-less git-pull(1) and other commands.
210           For more information, see branch.<name>.merge and
211           branch.<name>.remote in git-config(1).
212
213       --submodule-prefix=<path>
214           Prepend <path> to paths printed in informative messages such as
215           "Fetching submodule foo". This option is used internally when
216           recursing over submodules.
217
218       --recurse-submodules-default=[yes|on-demand]
219           This option is used internally to temporarily provide a
220           non-negative default value for the --recurse-submodules option. All
221           other methods of configuring fetch’s submodule recursion (such as
222           settings in gitmodules(5) and git-config(1)) override this option,
223           as does specifying --[no-]recurse-submodules directly.
224
225       -u, --update-head-ok
226           By default git fetch refuses to update the head which corresponds
227           to the current branch. This flag disables the check. This is purely
228           for the internal use for git pull to communicate with git fetch,
229           and unless you are implementing your own Porcelain you are not
230           supposed to use it.
231
232       --upload-pack <upload-pack>
233           When given, and the repository to fetch from is handled by git
234           fetch-pack, --exec=<upload-pack> is passed to the command to
235           specify non-default path for the command run on the other end.
236
237       -q, --quiet
238           Pass --quiet to git-fetch-pack and silence any other internally
239           used git commands. Progress is not reported to the standard error
240           stream.
241
242       -v, --verbose
243           Be verbose.
244
245       --progress
246           Progress status is reported on the standard error stream by default
247           when it is attached to a terminal, unless -q is specified. This
248           flag forces progress status even if the standard error stream is
249           not directed to a terminal.
250
251       -o <option>, --server-option=<option>
252           Transmit the given string to the server when communicating using
253           protocol version 2. The given string must not contain a NUL or LF
254           character. The server’s handling of server options, including
255           unknown ones, is server-specific. When multiple
256           --server-option=<option> are given, they are all sent to the other
257           side in the order listed on the command line.
258
259       --show-forced-updates
260           By default, git checks if a branch is force-updated during fetch.
261           This can be disabled through fetch.showForcedUpdates, but the
262           --show-forced-updates option guarantees this check occurs. See git-
263           config(1).
264
265       --no-show-forced-updates
266           By default, git checks if a branch is force-updated during fetch.
267           Pass --no-show-forced-updates or set fetch.showForcedUpdates to
268           false to skip this check for performance reasons. If used during
269           git-pull the --ff-only option will still check for forced updates
270           before attempting a fast-forward update. See git-config(1).
271
272       -4, --ipv4
273           Use IPv4 addresses only, ignoring IPv6 addresses.
274
275       -6, --ipv6
276           Use IPv6 addresses only, ignoring IPv4 addresses.
277
278       <repository>
279           The "remote" repository that is the source of a fetch or pull
280           operation. This parameter can be either a URL (see the section GIT
281           URLS below) or the name of a remote (see the section REMOTES
282           below).
283
284       <group>
285           A name referring to a list of repositories as the value of
286           remotes.<group> in the configuration file. (See git-config(1)).
287
288       <refspec>
289           Specifies which refs to fetch and which local refs to update. When
290           no <refspec>s appear on the command line, the refs to fetch are
291           read from remote.<repository>.fetch variables instead (see
292           CONFIGURED REMOTE-TRACKING BRANCHES below).
293
294           The format of a <refspec> parameter is an optional plus +, followed
295           by the source <src>, followed by a colon :, followed by the
296           destination ref <dst>. The colon can be omitted when <dst> is
297           empty. <src> is typically a ref, but it can also be a fully spelled
298           hex object name.
299
300           A <refspec> may contain a * in its <src> to indicate a simple
301           pattern match. Such a refspec functions like a glob that matches
302           any ref with the same prefix. A pattern <refspec> must have a * in
303           both the <src> and <dst>. It will map refs to the destination by
304           replacing the * with the contents matched from the source.
305
306           If a refspec is prefixed by ^, it will be interpreted as a negative
307           refspec. Rather than specifying which refs to fetch or which local
308           refs to update, such a refspec will instead specify refs to
309           exclude. A ref will be considered to match if it matches at least
310           one positive refspec, and does not match any negative refspec.
311           Negative refspecs can be useful to restrict the scope of a pattern
312           refspec so that it will not include specific refs. Negative
313           refspecs can themselves be pattern refspecs. However, they may only
314           contain a <src> and do not specify a <dst>. Fully spelled out hex
315           object names are also not supported.
316
317           tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>; it
318           requests fetching everything up to the given tag.
319
320           The remote ref that matches <src> is fetched, and if <dst> is not
321           an empty string, an attempt is made to update the local ref that
322           matches it.
323
324           Whether that update is allowed without --force depends on the ref
325           namespace it’s being fetched to, the type of object being fetched,
326           and whether the update is considered to be a fast-forward.
327           Generally, the same rules apply for fetching as when pushing, see
328           the <refspec>...  section of git-push(1) for what those are.
329           Exceptions to those rules particular to git fetch are noted below.
330
331           Until Git version 2.20, and unlike when pushing with git-push(1),
332           any updates to refs/tags/* would be accepted without + in the
333           refspec (or --force). When fetching, we promiscuously considered
334           all tag updates from a remote to be forced fetches. Since Git
335           version 2.20, fetching to update refs/tags/* works the same way as
336           when pushing. I.e. any updates will be rejected without + in the
337           refspec (or --force).
338
339           Unlike when pushing with git-push(1), any updates outside of
340           refs/{tags,heads}/* will be accepted without + in the refspec (or
341           --force), whether that’s swapping e.g. a tree object for a blob, or
342           a commit for another commit that’s doesn’t have the previous commit
343           as an ancestor etc.
344
345           Unlike when pushing with git-push(1), there is no configuration
346           which’ll amend these rules, and nothing like a pre-fetch hook
347           analogous to the pre-receive hook.
348
349           As with pushing with git-push(1), all of the rules described above
350           about what’s not allowed as an update can be overridden by adding
351           an the optional leading + to a refspec (or using --force command
352           line option). The only exception to this is that no amount of
353           forcing will make the refs/heads/* namespace accept a non-commit
354           object.
355
356               Note
357               When the remote branch you want to fetch is known to be rewound
358               and rebased regularly, it is expected that its new tip will not
359               be descendant of its previous tip (as stored in your
360               remote-tracking branch the last time you fetched). You would
361               want to use the + sign to indicate non-fast-forward updates
362               will be needed for such branches. There is no way to determine
363               or declare that a branch will be made available in a repository
364               with this behavior; the pulling user simply must know this is
365               the expected usage pattern for a branch.
366
367       --stdin
368           Read refspecs, one per line, from stdin in addition to those
369           provided as arguments. The "tag <name>" format is not supported.
370

GIT URLS

372       In general, URLs contain information about the transport protocol, the
373       address of the remote server, and the path to the repository. Depending
374       on the transport protocol, some of this information may be absent.
375
376       Git supports ssh, git, http, and https protocols (in addition, ftp, and
377       ftps can be used for fetching, but this is inefficient and deprecated;
378       do not use it).
379
380       The native transport (i.e. git:// URL) does no authentication and
381       should be used with caution on unsecured networks.
382
383       The following syntaxes may be used with them:
384
385       ·   ssh://[user@]host.xz[:port]/path/to/repo.git/
386
387       ·   git://host.xz[:port]/path/to/repo.git/
388
389       ·   http[s]://host.xz[:port]/path/to/repo.git/
390
391       ·   ftp[s]://host.xz[:port]/path/to/repo.git/
392
393       An alternative scp-like syntax may also be used with the ssh protocol:
394
395       ·   [user@]host.xz:path/to/repo.git/
396
397       This syntax is only recognized if there are no slashes before the first
398       colon. This helps differentiate a local path that contains a colon. For
399       example the local path foo:bar could be specified as an absolute path
400       or ./foo:bar to avoid being misinterpreted as an ssh url.
401
402       The ssh and git protocols additionally support ~username expansion:
403
404       ·   ssh://[user@]host.xz[:port]/~[user]/path/to/repo.git/
405
406       ·   git://host.xz[:port]/~[user]/path/to/repo.git/
407
408       ·   [user@]host.xz:/~[user]/path/to/repo.git/
409
410       For local repositories, also supported by Git natively, the following
411       syntaxes may be used:
412
413       ·   /path/to/repo.git/
414
415       ·   file:///path/to/repo.git/
416
417       These two syntaxes are mostly equivalent, except when cloning, when the
418       former implies --local option. See git-clone(1) for details.
419
420       git clone, git fetch and git pull, but not git push, will also accept a
421       suitable bundle file. See git-bundle(1).
422
423       When Git doesn’t know how to handle a certain transport protocol, it
424       attempts to use the remote-<transport> remote helper, if one exists. To
425       explicitly request a remote helper, the following syntax may be used:
426
427       ·   <transport>::<address>
428
429       where <address> may be a path, a server and path, or an arbitrary
430       URL-like string recognized by the specific remote helper being invoked.
431       See gitremote-helpers(7) for details.
432
433       If there are a large number of similarly-named remote repositories and
434       you want to use a different format for them (such that the URLs you use
435       will be rewritten into URLs that work), you can create a configuration
436       section of the form:
437
438                   [url "<actual url base>"]
439                           insteadOf = <other url base>
440
441       For example, with this:
442
443                   [url "git://git.host.xz/"]
444                           insteadOf = host.xz:/path/to/
445                           insteadOf = work:
446
447       a URL like "work:repo.git" or like "host.xz:/path/to/repo.git" will be
448       rewritten in any context that takes a URL to be
449       "git://git.host.xz/repo.git".
450
451       If you want to rewrite URLs for push only, you can create a
452       configuration section of the form:
453
454                   [url "<actual url base>"]
455                           pushInsteadOf = <other url base>
456
457       For example, with this:
458
459                   [url "ssh://example.org/"]
460                           pushInsteadOf = git://example.org/
461
462       a URL like "git://example.org/path/to/repo.git" will be rewritten to
463       "ssh://example.org/path/to/repo.git" for pushes, but pulls will still
464       use the original URL.
465

REMOTES

467       The name of one of the following can be used instead of a URL as
468       <repository> argument:
469
470       ·   a remote in the Git configuration file: $GIT_DIR/config,
471
472       ·   a file in the $GIT_DIR/remotes directory, or
473
474       ·   a file in the $GIT_DIR/branches directory.
475
476       All of these also allow you to omit the refspec from the command line
477       because they each contain a refspec which git will use by default.
478
479   Named remote in configuration file
480       You can choose to provide the name of a remote which you had previously
481       configured using git-remote(1), git-config(1) or even by a manual edit
482       to the $GIT_DIR/config file. The URL of this remote will be used to
483       access the repository. The refspec of this remote will be used by
484       default when you do not provide a refspec on the command line. The
485       entry in the config file would appear like this:
486
487                   [remote "<name>"]
488                           url = <url>
489                           pushurl = <pushurl>
490                           push = <refspec>
491                           fetch = <refspec>
492
493       The <pushurl> is used for pushes only. It is optional and defaults to
494       <url>.
495
496   Named file in $GIT_DIR/remotes
497       You can choose to provide the name of a file in $GIT_DIR/remotes. The
498       URL in this file will be used to access the repository. The refspec in
499       this file will be used as default when you do not provide a refspec on
500       the command line. This file should have the following format:
501
502                   URL: one of the above URL format
503                   Push: <refspec>
504                   Pull: <refspec>
505
506       Push: lines are used by git push and Pull: lines are used by git pull
507       and git fetch. Multiple Push: and Pull: lines may be specified for
508       additional branch mappings.
509
510   Named file in $GIT_DIR/branches
511       You can choose to provide the name of a file in $GIT_DIR/branches. The
512       URL in this file will be used to access the repository. This file
513       should have the following format:
514
515                   <url>#<head>
516
517       <url> is required; #<head> is optional.
518
519       Depending on the operation, git will use one of the following refspecs,
520       if you don’t provide one on the command line. <branch> is the name of
521       this file in $GIT_DIR/branches and <head> defaults to master.
522
523       git fetch uses:
524
525                   refs/heads/<head>:refs/heads/<branch>
526
527       git push uses:
528
529                   HEAD:refs/heads/<head>
530

CONFIGURED REMOTE-TRACKING BRANCHES

532       You often interact with the same remote repository by regularly and
533       repeatedly fetching from it. In order to keep track of the progress of
534       such a remote repository, git fetch allows you to configure
535       remote.<repository>.fetch configuration variables.
536
537       Typically such a variable may look like this:
538
539           [remote "origin"]
540                   fetch = +refs/heads/*:refs/remotes/origin/*
541
542       This configuration is used in two ways:
543
544       ·   When git fetch is run without specifying what branches and/or tags
545           to fetch on the command line, e.g.  git fetch origin or git fetch,
546           remote.<repository>.fetch values are used as the refspecs—they
547           specify which refs to fetch and which local refs to update. The
548           example above will fetch all branches that exist in the origin
549           (i.e. any ref that matches the left-hand side of the value,
550           refs/heads/*) and update the corresponding remote-tracking branches
551           in the refs/remotes/origin/* hierarchy.
552
553       ·   When git fetch is run with explicit branches and/or tags to fetch
554           on the command line, e.g.  git fetch origin master, the <refspec>s
555           given on the command line determine what are to be fetched (e.g.
556           master in the example, which is a short-hand for master:, which in
557           turn means "fetch the master branch but I do not explicitly say
558           what remote-tracking branch to update with it from the command
559           line"), and the example command will fetch only the master branch.
560           The remote.<repository>.fetch values determine which
561           remote-tracking branch, if any, is updated. When used in this way,
562           the remote.<repository>.fetch values do not have any effect in
563           deciding what gets fetched (i.e. the values are not used as
564           refspecs when the command-line lists refspecs); they are only used
565           to decide where the refs that are fetched are stored by acting as a
566           mapping.
567
568       The latter use of the remote.<repository>.fetch values can be
569       overridden by giving the --refmap=<refspec> parameter(s) on the command
570       line.
571

PRUNING

573       Git has a default disposition of keeping data unless it’s explicitly
574       thrown away; this extends to holding onto local references to branches
575       on remotes that have themselves deleted those branches.
576
577       If left to accumulate, these stale references might make performance
578       worse on big and busy repos that have a lot of branch churn, and e.g.
579       make the output of commands like git branch -a --contains <commit>
580       needlessly verbose, as well as impacting anything else that’ll work
581       with the complete set of known references.
582
583       These remote-tracking references can be deleted as a one-off with
584       either of:
585
586           # While fetching
587           $ git fetch --prune <name>
588
589           # Only prune, don't fetch
590           $ git remote prune <name>
591
592       To prune references as part of your normal workflow without needing to
593       remember to run that, set fetch.prune globally, or remote.<name>.prune
594       per-remote in the config. See git-config(1).
595
596       Here’s where things get tricky and more specific. The pruning feature
597       doesn’t actually care about branches, instead it’ll prune local <→
598       remote-references as a function of the refspec of the remote (see
599       <refspec> and CONFIGURED REMOTE-TRACKING BRANCHES above).
600
601       Therefore if the refspec for the remote includes e.g.
602       refs/tags/*:refs/tags/*, or you manually run e.g. git fetch --prune
603       <name> "refs/tags/*:refs/tags/*" it won’t be stale remote tracking
604       branches that are deleted, but any local tag that doesn’t exist on the
605       remote.
606
607       This might not be what you expect, i.e. you want to prune remote
608       <name>, but also explicitly fetch tags from it, so when you fetch from
609       it you delete all your local tags, most of which may not have come from
610       the <name> remote in the first place.
611
612       So be careful when using this with a refspec like
613       refs/tags/*:refs/tags/*, or any other refspec which might map
614       references from multiple remotes to the same local namespace.
615
616       Since keeping up-to-date with both branches and tags on the remote is a
617       common use-case the --prune-tags option can be supplied along with
618       --prune to prune local tags that don’t exist on the remote, and
619       force-update those tags that differ. Tag pruning can also be enabled
620       with fetch.pruneTags or remote.<name>.pruneTags in the config. See git-
621       config(1).
622
623       The --prune-tags option is equivalent to having refs/tags/*:refs/tags/*
624       declared in the refspecs of the remote. This can lead to some seemingly
625       strange interactions:
626
627           # These both fetch tags
628           $ git fetch --no-tags origin 'refs/tags/*:refs/tags/*'
629           $ git fetch --no-tags --prune-tags origin
630
631       The reason it doesn’t error out when provided without --prune or its
632       config versions is for flexibility of the configured versions, and to
633       maintain a 1=1 mapping between what the command line flags do, and what
634       the configuration versions do.
635
636       It’s reasonable to e.g. configure fetch.pruneTags=true in ~/.gitconfig
637       to have tags pruned whenever git fetch --prune is run, without making
638       every invocation of git fetch without --prune an error.
639
640       Pruning tags with --prune-tags also works when fetching a URL instead
641       of a named remote. These will all prune tags not found on origin:
642
643           $ git fetch origin --prune --prune-tags
644           $ git fetch origin --prune 'refs/tags/*:refs/tags/*'
645           $ git fetch <url of origin> --prune --prune-tags
646           $ git fetch <url of origin> --prune 'refs/tags/*:refs/tags/*'
647

OUTPUT

649       The output of "git fetch" depends on the transport method used; this
650       section describes the output when fetching over the Git protocol
651       (either locally or via ssh) and Smart HTTP protocol.
652
653       The status of the fetch is output in tabular form, with each line
654       representing the status of a single ref. Each line is of the form:
655
656            <flag> <summary> <from> -> <to> [<reason>]
657
658       The status of up-to-date refs is shown only if the --verbose option is
659       used.
660
661       In compact output mode, specified with configuration variable
662       fetch.output, if either entire <from> or <to> is found in the other
663       string, it will be substituted with * in the other string. For example,
664       master -> origin/master becomes master -> origin/*.
665
666       flag
667           A single character indicating the status of the ref:
668
669           (space)
670               for a successfully fetched fast-forward;
671
672           +
673               for a successful forced update;
674
675           -
676               for a successfully pruned ref;
677
678           t
679               for a successful tag update;
680
681           *
682               for a successfully fetched new ref;
683
684           !
685               for a ref that was rejected or failed to update; and
686
687           =
688               for a ref that was up to date and did not need fetching.
689
690       summary
691           For a successfully fetched ref, the summary shows the old and new
692           values of the ref in a form suitable for using as an argument to
693           git log (this is <old>..<new> in most cases, and <old>...<new> for
694           forced non-fast-forward updates).
695
696       from
697           The name of the remote ref being fetched from, minus its
698           refs/<type>/ prefix. In the case of deletion, the name of the
699           remote ref is "(none)".
700
701       to
702           The name of the local ref being updated, minus its refs/<type>/
703           prefix.
704
705       reason
706           A human-readable explanation. In the case of successfully fetched
707           refs, no explanation is needed. For a failed ref, the reason for
708           failure is described.
709

EXAMPLES

711       ·   Update the remote-tracking branches:
712
713               $ git fetch origin
714
715           The above command copies all branches from the remote refs/heads/
716           namespace and stores them to the local refs/remotes/origin/
717           namespace, unless the branch.<name>.fetch option is used to specify
718           a non-default refspec.
719
720       ·   Using refspecs explicitly:
721
722               $ git fetch origin +seen:seen maint:tmp
723
724           This updates (or creates, as necessary) branches seen and tmp in
725           the local repository by fetching from the branches (respectively)
726           seen and maint from the remote repository.
727
728           The seen branch will be updated even if it does not fast-forward,
729           because it is prefixed with a plus sign; tmp will not be.
730
731       ·   Peek at a remote’s branch, without configuring the remote in your
732           local repository:
733
734               $ git fetch git://git.kernel.org/pub/scm/git/git.git maint
735               $ git log FETCH_HEAD
736
737           The first command fetches the maint branch from the repository at
738           git://git.kernel.org/pub/scm/git/git.git and the second command
739           uses FETCH_HEAD to examine the branch with git-log(1). The fetched
740           objects will eventually be removed by git’s built-in housekeeping
741           (see git-gc(1)).
742

SECURITY

744       The fetch and push protocols are not designed to prevent one side from
745       stealing data from the other repository that was not intended to be
746       shared. If you have private data that you need to protect from a
747       malicious peer, your best option is to store it in another repository.
748       This applies to both clients and servers. In particular, namespaces on
749       a server are not effective for read access control; you should only
750       grant read access to a namespace to clients that you would trust with
751       read access to the entire repository.
752
753       The known attack vectors are as follows:
754
755        1. The victim sends "have" lines advertising the IDs of objects it has
756           that are not explicitly intended to be shared but can be used to
757           optimize the transfer if the peer also has them. The attacker
758           chooses an object ID X to steal and sends a ref to X, but isn’t
759           required to send the content of X because the victim already has
760           it. Now the victim believes that the attacker has X, and it sends
761           the content of X back to the attacker later. (This attack is most
762           straightforward for a client to perform on a server, by creating a
763           ref to X in the namespace the client has access to and then
764           fetching it. The most likely way for a server to perform it on a
765           client is to "merge" X into a public branch and hope that the user
766           does additional work on this branch and pushes it back to the
767           server without noticing the merge.)
768
769        2. As in #1, the attacker chooses an object ID X to steal. The victim
770           sends an object Y that the attacker already has, and the attacker
771           falsely claims to have X and not Y, so the victim sends Y as a
772           delta against X. The delta reveals regions of X that are similar to
773           Y to the attacker.
774

BUGS

776       Using --recurse-submodules can only fetch new commits in already
777       checked out submodules right now. When e.g. upstream added a new
778       submodule in the just fetched commits of the superproject the submodule
779       itself cannot be fetched, making it impossible to check out that
780       submodule later without having to do a fetch again. This is expected to
781       be fixed in a future Git version.
782

SEE ALSO

784       git-pull(1)
785

GIT

787       Part of the git(1) suite
788
789
790
791Git 2.30.2                        2021-03-08                      GIT-FETCH(1)
Impressum