6 git-pull - Fetch from and integrate with another repository or a local branch
12 'git pull' [<options>] [<repository> [<refspec>...]]
18 Incorporates changes from a remote repository into the current branch.
19 If the current branch is behind the remote, then by default it will
20 fast-forward the current branch to match the remote. If the current
21 branch and the remote have diverged, the user needs to specify how to
22 reconcile the divergent branches with `--rebase` or `--no-rebase` (or
23 the corresponding configuration option in `pull.rebase`).
25 More precisely, `git pull` runs `git fetch` with the given parameters
26 and then depending on configuration options or command line flags,
27 will call either `git rebase` or `git merge` to reconcile diverging
30 <repository> should be the name of a remote repository as
31 passed to linkgit:git-fetch[1]. <refspec> can name an
32 arbitrary remote ref (for example, the name of a tag) or even
33 a collection of refs with corresponding remote-tracking branches
34 (e.g., refs/heads/{asterisk}:refs/remotes/origin/{asterisk}),
35 but usually it is the name of a branch in the remote repository.
37 Default values for <repository> and <branch> are read from the
38 "remote" and "merge" configuration for the current branch
39 as set by linkgit:git-branch[1] `--track`.
41 Assume the following history exists and the current branch is
45 A---B---C master on origin
49 origin/master in your repository
52 Then "`git pull`" will fetch and replay the changes from the remote
53 `master` branch since it diverged from the local `master` (i.e., `E`)
54 until its current commit (`C`) on top of `master` and record the
55 result in a new commit along with the names of the two parent commits
56 and a log message from the user describing the changes.
59 A---B---C origin/master
61 D---E---F---G---H master
64 See linkgit:git-merge[1] for details, including how conflicts
65 are presented and handled.
67 In Git 1.7.0 or later, to cancel a conflicting merge, use
68 `git reset --merge`. *Warning*: In older versions of Git, running 'git pull'
69 with uncommitted changes is discouraged: while possible, it leaves you
70 in a state that may be hard to back out of in the case of a conflict.
72 If any of the remote changes overlap with local uncommitted changes,
73 the merge will be automatically canceled and the work tree untouched.
74 It is generally best to get any local changes in working order before
75 pulling or stash them away with linkgit:git-stash[1].
82 This is passed to both underlying git-fetch to squelch reporting of
83 during transfer, and underlying git-merge to squelch output during
88 Pass --verbose to git-fetch and git-merge.
90 --[no-]recurse-submodules[=yes|on-demand|no]::
91 This option controls if new commits of populated submodules should
92 be fetched, and if the working trees of active submodules should be
93 updated, too (see linkgit:git-fetch[1], linkgit:git-config[1] and
94 linkgit:gitmodules[5]).
96 If the checkout is done via rebase, local submodule commits are rebased as well.
98 If the update is done via merge, the submodule conflicts are resolved and checked out.
100 Options related to merging
101 ~~~~~~~~~~~~~~~~~~~~~~~~~~
105 include::merge-options.txt[]
108 --rebase[=false|true|merges|interactive]::
109 When true, rebase the current branch on top of the upstream
110 branch after fetching. If there is a remote-tracking branch
111 corresponding to the upstream branch and the upstream branch
112 was rebased since last fetched, the rebase uses that information
113 to avoid rebasing non-local changes.
115 When set to `merges`, rebase using `git rebase --rebase-merges` so that
116 the local merge commits are included in the rebase (see
117 linkgit:git-rebase[1] for details).
119 When false, merge the upstream branch into the current branch.
121 When `interactive`, enable the interactive mode of rebase.
123 See `pull.rebase`, `branch.<name>.rebase` and `branch.autoSetupRebase` in
124 linkgit:git-config[1] if you want to make `git pull` always use
125 `--rebase` instead of merging.
128 This is a potentially _dangerous_ mode of operation.
129 It rewrites history, which does not bode well when you
130 published that history already. Do *not* use this option
131 unless you have read linkgit:git-rebase[1] carefully.
134 This is shorthand for --rebase=false.
136 Options related to fetching
137 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
139 include::fetch-options.txt[]
141 include::pull-fetch-param.txt[]
143 include::urls-remotes.txt[]
145 include::merge-strategies.txt[]
150 Often people use `git pull` without giving any parameter.
151 Traditionally, this has been equivalent to saying `git pull
152 origin`. However, when configuration `branch.<name>.remote` is
153 present while on branch `<name>`, that value is used instead of
156 In order to determine what URL to use to fetch from, the value
157 of the configuration `remote.<origin>.url` is consulted
158 and if there is not any such variable, the value on the `URL:` line
159 in `$GIT_DIR/remotes/<origin>` is used.
161 In order to determine what remote branches to fetch (and
162 optionally store in the remote-tracking branches) when the command is
163 run without any refspec parameters on the command line, values
164 of the configuration variable `remote.<origin>.fetch` are
165 consulted, and if there aren't any, `$GIT_DIR/remotes/<origin>`
166 is consulted and its `Pull:` lines are used.
167 In addition to the refspec formats described in the OPTIONS
168 section, you can have a globbing refspec that looks like this:
171 refs/heads/*:refs/remotes/origin/*
174 A globbing refspec must have a non-empty RHS (i.e. must store
175 what were fetched in remote-tracking branches), and its LHS and RHS
176 must end with `/*`. The above specifies that all remote
177 branches are tracked using remote-tracking branches in
178 `refs/remotes/origin/` hierarchy under the same name.
180 The rule to determine which remote branch to merge after
181 fetching is a bit involved, in order not to break backward
184 If explicit refspecs were given on the command
185 line of `git pull`, they are all merged.
187 When no refspec was given on the command line, then `git pull`
188 uses the refspec from the configuration or
189 `$GIT_DIR/remotes/<origin>`. In such cases, the following
192 . If `branch.<name>.merge` configuration for the current
193 branch `<name>` exists, that is the name of the branch at the
194 remote site that is merged.
196 . If the refspec is a globbing one, nothing is merged.
198 . Otherwise the remote branch of the first refspec is merged.
204 * Update the remote-tracking branches for the repository
205 you cloned from, then merge one of them into your
208 ------------------------------------------------
211 ------------------------------------------------
213 Normally the branch merged in is the HEAD of the remote repository,
214 but the choice is determined by the branch.<name>.remote and
215 branch.<name>.merge options; see linkgit:git-config[1] for details.
217 * Merge into the current branch the remote branch `next`:
219 ------------------------------------------------
220 $ git pull origin next
221 ------------------------------------------------
223 This leaves a copy of `next` temporarily in FETCH_HEAD, and
224 updates the remote-tracking branch `origin/next`.
225 The same can be done by invoking fetch and merge:
227 ------------------------------------------------
229 $ git merge origin/next
230 ------------------------------------------------
233 If you tried a pull which resulted in complex conflicts and
234 would want to start over, you can recover with 'git reset'.
237 include::transfer-data-leaks.txt[]
241 Using --recurse-submodules can only fetch new commits in already checked
242 out submodules right now. When e.g. upstream added a new submodule in the
243 just fetched commits of the superproject the submodule itself cannot be
244 fetched, making it impossible to check out that submodule later without
245 having to do a fetch again. This is expected to be fixed in a future Git
250 linkgit:git-fetch[1], linkgit:git-merge[1], linkgit:git-config[1]
254 Part of the linkgit:git[1] suite