blob: ebdd948cd23931e9bbc35bb304868ce46902e464 [file] [log] [blame]
Junio C Hamano0c040942005-07-16 00:17:42 -07001<repository>::
Jon Loeligerbccf5952005-11-04 20:36:08 -06002 The "remote" repository that is the source of a fetch
John J. Franey58124732008-05-29 13:32:31 -04003 or pull operation. This parameter can be either a URL
4 (see the section <<URLS,GIT URLS>> below) or the name
5 of a remote (see the section <<REMOTES,REMOTES>> below).
Junio C Hamanoab9b3132005-08-24 16:23:08 -07006
7<refspec>::
8 The canonical format of a <refspec> parameter is
Junio C Hamano0f4f4d12008-08-07 16:05:25 -07009 `+?<src>:<dst>`; that is, an optional plus `{plus}`, followed
Jon Loeligerbccf5952005-11-04 20:36:08 -060010 by the source ref, followed by a colon `:`, followed by
Junio C Hamanoab9b3132005-08-24 16:23:08 -070011 the destination ref.
Jonas Fonsecadf8baa42005-10-03 19:16:30 +020012+
J. Bruce Fields3598a302006-02-05 17:43:47 -050013The remote ref that matches <src>
Jonas Fonsecadf8baa42005-10-03 19:16:30 +020014is fetched, and if <dst> is not empty string, the local
15ref that matches it is fast forwarded using <src>.
Jon Loeligerbccf5952005-11-04 20:36:08 -060016Again, if the optional plus `+` is used, the local ref
Jonas Fonsecadf8baa42005-10-03 19:16:30 +020017is updated even if it does not result in a fast forward
18update.
19+
Jon Loeligerbccf5952005-11-04 20:36:08 -060020[NOTE]
21If the remote branch from which you want to pull is
22modified in non-linear ways such as being rewound and
23rebased frequently, then a pull will attempt a merge with
24an older version of itself, likely conflict, and fail.
25It is under these conditions that you would want to use
26the `+` sign to indicate non-fast-forward updates will
27be needed. There is currently no easy way to determine
28or declare that a branch will be made available in a
29repository with this behavior; the pulling user simply
30must know this is the expected usage pattern for a branch.
31+
32[NOTE]
33You never do your own development on branches that appear
34on the right hand side of a <refspec> colon on `Pull:` lines;
Jonathan Niederba020ef2008-07-03 00:41:41 -050035they are to be updated by 'git-fetch'. If you intend to do
Junio C Hamano46071662005-11-05 22:26:52 -080036development derived from a remote branch `B`, have a `Pull:`
37line to track it (i.e. `Pull: B:remote-B`), and have a separate
38branch `my-B` to do your development on top of it. The latter
39is created by `git branch my-B remote-B` (or its equivalent `git
40checkout -b my-B remote-B`). Run `git fetch` to keep track of
41the progress of the remote side, and when you see something new
42on the remote branch, merge it into your development branch with
43`git pull . remote-B`, while you are on `my-B` branch.
Jon Loeligerbccf5952005-11-04 20:36:08 -060044+
Junio C Hamanofdd08972005-11-05 01:37:00 -080045[NOTE]
46There is a difference between listing multiple <refspec>
Jonathan Niederba020ef2008-07-03 00:41:41 -050047directly on 'git-pull' command line and having multiple
Junio C Hamanofdd08972005-11-05 01:37:00 -080048`Pull:` <refspec> lines for a <repository> and running
Jonathan Niederba020ef2008-07-03 00:41:41 -050049'git-pull' command without any explicit <refspec> parameters.
Junio C Hamanofdd08972005-11-05 01:37:00 -080050<refspec> listed explicitly on the command line are always
51merged into the current branch after fetching. In other words,
52if you list more than one remote refs, you would be making
Jonathan Niederba020ef2008-07-03 00:41:41 -050053an Octopus. While 'git-pull' run without any explicit <refspec>
Junio C Hamanofdd08972005-11-05 01:37:00 -080054parameter takes default <refspec>s from `Pull:` lines, it
55merges only the first <refspec> found into the current branch,
56after fetching all the remote refs. This is because making an
57Octopus from remote refs is rarely done, while keeping track
58of multiple remote heads in one-go by fetching more than one
59is often useful.
60+
Jonas Fonsecadf8baa42005-10-03 19:16:30 +020061Some short-cut notations are also supported.
62+
Junio C Hamanoa6080a02007-06-07 00:04:01 -070063* `tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`;
J. Bruce Fields3598a302006-02-05 17:43:47 -050064 it requests fetching everything up to the given tag.
Jonas Fonsecadf8baa42005-10-03 19:16:30 +020065* A parameter <ref> without a colon is equivalent to
J. Bruce Fields3598a302006-02-05 17:43:47 -050066 <ref>: when pulling/fetching, so it merges <ref> into the current
67 branch without storing the remote branch anywhere locally