]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-pull.txt
Document that rev-list --graph triggers parent rewriting.
[thirdparty/git.git] / Documentation / git-pull.txt
CommitLineData
215a7ad1
JH
1git-pull(1)
2===========
2cf565c5
DG
3
4NAME
5----
c3f0baac 6git-pull - Fetch from and merge with another repository or a local branch
2cf565c5
DG
7
8
9SYNOPSIS
10--------
3f8fc184 11'git pull' [options] [<repository> [<refspec>...]]
0c04094b 12
2cf565c5
DG
13
14DESCRIPTION
15-----------
ab9b3138 16
3f8fc184
JN
17Incorporates changes from a remote repository into the current
18branch. In its default mode, `git pull` is shorthand for
19`git fetch` followed by `git merge FETCH_HEAD`.
0c04094b 20
3f8fc184
JN
21More precisely, 'git pull' runs 'git fetch' with the given
22parameters and calls 'git merge' to merge the retrieved branch
23heads into the current branch.
24With `--rebase`, it runs 'git rebase' instead of 'git merge'.
93d69d86 25
3f8fc184
JN
26<repository> should be the name of a remote repository as
27passed to linkgit:git-fetch[1]. <refspec> can name an
28arbitrary remote ref (for example, the name of a tag) or even
29a collection of refs with corresponding remote tracking branches
30(e.g., refs/heads/*:refs/remotes/origin/*), but usually it is
31the name of a branch in the remote repository.
32
33Default values for <repository> and <branch> are read from the
34"remote" and "merge" configuration for the current branch
35as set by linkgit:git-branch[1] `--track`.
36
37Assume the following history exists and the current branch is
38"`master`":
39
40------------
41 A---B---C master on origin
42 /
43 D---E---F---G master
44------------
45
46Then "`git pull`" will fetch and replay the changes from the remote
47`master` branch since it diverged from the local `master` (i.e., `E`)
48until its current commit (`C`) on top of `master` and record the
49result in a new commit along with the names of the two parent commits
50and a log message from the user describing the changes.
51
52------------
53 A---B---C remotes/origin/master
54 / \
55 D---E---F---G---H master
56------------
57
58See linkgit:git-merge[1] for details, including how conflicts
59are presented and handled.
60
61In git 1.7.0 or later, to cancel a conflicting merge, use
62`git reset --merge`. *Warning*: In older versions of git, running 'git pull'
e330d8ca 63with uncommitted changes is discouraged: while possible, it leaves you
3f8fc184
JN
64in a state that may be hard to back out of in the case of a conflict.
65
66If any of the remote changes overlap with local uncommitted changes,
67the merge will be automatically cancelled and the work tree untouched.
68It is generally best to get any local changes in working order before
69pulling or stash them away with linkgit:git-stash[1].
e330d8ca 70
0c04094b
JH
71OPTIONS
72-------
3f7a9b5a 73
3f8fc184
JN
74Options meant for 'git pull' itself and the underlying 'git merge'
75must be given before the options meant for 'git fetch'.
76
409b8d82
TRC
77-q::
78--quiet::
9839018e
TRC
79 This is passed to both underlying git-fetch to squelch reporting of
80 during transfer, and underlying git-merge to squelch output during
81 merging.
409b8d82
TRC
82
83-v::
84--verbose::
85 Pass --verbose to git-fetch and git-merge.
86
3f7a9b5a
JA
87Options related to merging
88~~~~~~~~~~~~~~~~~~~~~~~~~~
89
93d69d86 90include::merge-options.txt[]
2cf565c5 91
10eb64f5 92:git-pull: 1
37465016 93
3240240f 94--rebase::
c85c7927
JS
95 Instead of a merge, perform a rebase after fetching. If
96 there is a remote ref for the upstream branch, and this branch
97 was rebased since last fetched, the rebase uses that information
a288394e
JS
98 to avoid rebasing non-local changes. To make this the default
99 for branch `<name>`, set configuration `branch.<name>.rebase`
100 to `true`.
473d3316 101+
6bfa3c99
JH
102[NOTE]
103This is a potentially _dangerous_ mode of operation.
473d3316
JH
104It rewrites history, which does not bode well when you
105published that history already. Do *not* use this option
106unless you have read linkgit:git-rebase[1] carefully.
cd67e4d4 107
3240240f
SB
108--no-rebase::
109 Override earlier --rebase.
cd67e4d4 110
3f7a9b5a
JA
111Options related to fetching
112~~~~~~~~~~~~~~~~~~~~~~~~~~~
113
a288394e
JS
114include::fetch-options.txt[]
115
116include::pull-fetch-param.txt[]
117
118include::urls-remotes.txt[]
119
120include::merge-strategies.txt[]
121
9e2586ff
JH
122DEFAULT BEHAVIOUR
123-----------------
124
125Often people use `git pull` without giving any parameter.
126Traditionally, this has been equivalent to saying `git pull
127origin`. However, when configuration `branch.<name>.remote` is
128present while on branch `<name>`, that value is used instead of
129`origin`.
130
131In order to determine what URL to use to fetch from, the value
132of the configuration `remote.<origin>.url` is consulted
133and if there is not any such variable, the value on `URL: ` line
134in `$GIT_DIR/remotes/<origin>` file is used.
135
136In order to determine what remote branches to fetch (and
137optionally store in the tracking branches) when the command is
138run without any refspec parameters on the command line, values
139of the configuration variable `remote.<origin>.fetch` are
140consulted, and if there aren't any, `$GIT_DIR/remotes/<origin>`
141file is consulted and its `Pull: ` lines are used.
142In addition to the refspec formats described in the OPTIONS
143section, you can have a globbing refspec that looks like this:
144
145------------
146refs/heads/*:refs/remotes/origin/*
147------------
148
149A globbing refspec must have a non-empty RHS (i.e. must store
150what were fetched in tracking branches), and its LHS and RHS
151must end with `/*`. The above specifies that all remote
152branches are tracked using tracking branches in
153`refs/remotes/origin/` hierarchy under the same name.
154
155The rule to determine which remote branch to merge after
156fetching is a bit involved, in order not to break backward
157compatibility.
158
159If explicit refspecs were given on the command
160line of `git pull`, they are all merged.
161
162When no refspec was given on the command line, then `git pull`
163uses the refspec from the configuration or
164`$GIT_DIR/remotes/<origin>`. In such cases, the following
165rules apply:
166
167. If `branch.<name>.merge` configuration for the current
168 branch `<name>` exists, that is the name of the branch at the
169 remote site that is merged.
170
171. If the refspec is a globbing one, nothing is merged.
172
173. Otherwise the remote branch of the first refspec is merged.
174
175
37465016
JH
176EXAMPLES
177--------
178
921177f5
CC
179* Update the remote-tracking branches for the repository
180 you cloned from, then merge one of them into your
181 current branch:
182+
183------------------------------------------------
184$ git pull, git pull origin
185------------------------------------------------
186+
187Normally the branch merged in is the HEAD of the remote repository,
188but the choice is determined by the branch.<name>.remote and
189branch.<name>.merge options; see linkgit:git-config[1] for details.
190
191* Merge into the current branch the remote branch `next`:
192+
193------------------------------------------------
194$ git pull origin next
195------------------------------------------------
196+
197This leaves a copy of `next` temporarily in FETCH_HEAD, but
d504f697
CB
198does not update any remote-tracking branches. Using remote-tracking
199branches, the same can be done by invoking fetch and merge:
921177f5
CC
200+
201------------------------------------------------
d504f697
CB
202$ git fetch origin
203$ git merge origin/next
921177f5 204------------------------------------------------
bccf5956 205
37465016 206
3ae854c3 207If you tried a pull which resulted in a complex conflicts and
0b444cdb 208would want to start over, you can recover with 'git reset'.
3ae854c3
JH
209
210
fdd08979
JH
211SEE ALSO
212--------
5162e697 213linkgit:git-fetch[1], linkgit:git-merge[1], linkgit:git-config[1]
fdd08979
JH
214
215
2cf565c5
DG
216Author
217------
3f971fc4 218Written by Linus Torvalds <torvalds@osdl.org>
59eb68aa 219and Junio C Hamano <gitster@pobox.com>
2cf565c5
DG
220
221Documentation
222--------------
bccf5956
JL
223Documentation by Jon Loeliger,
224David Greaves,
225Junio C Hamano and the git-list <git@vger.kernel.org>.
2cf565c5
DG
226
227GIT
228---
9e1f0a85 229Part of the linkgit:git[1] suite