| git-pull(1) | |
| =========== | |
| NAME | |
| ---- | |
| git-pull - Fetch from and integrate with another repository or a local branch | |
| SYNOPSIS | |
| -------- | |
| [synopsis] | |
| git pull [<options>] [<repository> [<refspec>...]] | |
| DESCRIPTION | |
| ----------- | |
| Integrate changes from a remote repository into the current branch. | |
| First, `git pull` runs `git fetch` with the same arguments | |
| (excluding merge options) to fetch remote branch(es). | |
| Then it decides which remote branch to integrate: if you run `git pull` | |
| with no arguments this defaults to the <<UPSTREAM-BRANCHES,upstream>> | |
| for the current branch. | |
| Then it integrates that branch into the current branch. | |
| There are 4 main options for integrating the remote branch: | |
| 1. `git pull --ff-only` will only do "fast-forward" updates: it | |
| fails if your local branch has diverged from the remote branch. | |
| This is the default. | |
| 2. `git pull --rebase` runs `git rebase` | |
| 3. `git pull --no-rebase` runs `git merge`. | |
| 4. `git pull --squash` runs `git merge --squash` | |
| You can also set the configuration options `pull.rebase`, `pull.squash`, | |
| or `pull.ff` with your preferred behaviour. | |
| If there's a merge conflict during the merge or rebase that you don't | |
| want to handle, you can safely abort it with `git merge --abort` or | |
| `git rebase --abort`. | |
| OPTIONS | |
| ------- | |
| _<repository>_:: | |
| The "remote" repository to pull from. This can be either | |
| a URL (see the section <<URLS,GIT URLS>> below) or the name | |
| of a remote (see the section <<REMOTES,REMOTES>> below). | |
| + | |
| Defaults to the configured upstream for the current branch, or `origin`. | |
| See <<UPSTREAM-BRANCHES,UPSTREAM BRANCHES>> below for more on how to | |
| configure upstreams. | |
| _<refspec>_:: | |
| Which branch or other reference(s) to fetch and integrate into the | |
| current branch, for example `main` in `git pull origin main`. | |
| Defaults to the configured upstream for the current branch. | |
| + | |
| This can be a branch, tag, or other collection of reference(s). | |
| See <<fetch-refspec,_<refspec>_>> below under "Options related to fetching" | |
| for the full syntax, and <<DEFAULT-BEHAVIOUR,DEFAULT BEHAVIOUR>> below | |
| for how `git pull` uses this argument to determine which remote branch | |
| to integrate. | |
| `-q`:: | |
| `--quiet`:: | |
| This is passed to both underlying git-fetch to squelch reporting of | |
| during transfer, and underlying git-merge to squelch output during | |
| merging. | |
| `-v`:: | |
| `--verbose`:: | |
| Pass `--verbose` to git-fetch and git-merge. | |
| `--recurse-submodules[=(yes|on-demand|no)]`:: | |
| `--no-recurse-submodules`:: | |
| This option controls if new commits of populated submodules should | |
| be fetched, and if the working trees of active submodules should be | |
| updated, too (see linkgit:git-fetch[1], linkgit:git-config[1] and | |
| linkgit:gitmodules[5]). | |
| + | |
| If the checkout is done via rebase, local submodule commits are rebased as well. | |
| + | |
| If the update is done via merge, the submodule conflicts are resolved and checked out. | |
| Options related to merging | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| :git-pull: 1 | |
| include::merge-options.adoc[] | |
| `-r`:: | |
| `--rebase[=(true|merges|false|interactive)]`:: | |
| `true`;; rebase the current branch on top of the upstream | |
| branch after fetching. If there is a remote-tracking branch | |
| corresponding to the upstream branch and the upstream branch | |
| was rebased since last fetched, the rebase uses that information | |
| to avoid rebasing non-local changes. This is the default. | |
| `merges`;; rebase using `git rebase --rebase-merges` so that | |
| the local merge commits are included in the rebase (see | |
| linkgit:git-rebase[1] for details). | |
| `false`;; merge the upstream branch into the current branch. | |
| `interactive`;; enable the interactive mode of rebase. | |
| + | |
| See `pull.rebase`, `branch.<name>.rebase` and `branch.autoSetupRebase` in | |
| linkgit:git-config[1] if you want to make `git pull` always use | |
| `--rebase` instead of merging. | |
| + | |
| [NOTE] | |
| This is a potentially _dangerous_ mode of operation. | |
| It rewrites history, which does not bode well when you | |
| published that history already. Do *not* use this option | |
| unless you have read linkgit:git-rebase[1] carefully. | |
| `--no-rebase`:: | |
| This is shorthand for `--rebase=false`. | |
| Options related to fetching | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| include::fetch-options.adoc[] | |
| include::pull-fetch-param.adoc[] | |
| include::urls-remotes.adoc[] | |
| include::merge-strategies.adoc[] | |
| [[DEFAULT-BEHAVIOUR]] | |
| DEFAULT BEHAVIOUR | |
| ----------------- | |
| Often people use `git pull` without giving any parameter. | |
| Traditionally, this has been equivalent to saying `git pull | |
| origin`. However, when configuration `branch.<name>.remote` is | |
| present while on branch `<name>`, that value is used instead of | |
| `origin`. | |
| In order to determine what URL to use to fetch from, the value | |
| of the configuration `remote.<origin>.url` is consulted | |
| and if there is not any such variable, the value on the `URL:` line | |
| in `$GIT_DIR/remotes/<origin>` is used. | |
| In order to determine what remote branches to fetch (and | |
| optionally store in the remote-tracking branches) when the command is | |
| run without any refspec parameters on the command line, values | |
| of the configuration variable `remote.<origin>.fetch` are | |
| consulted, and if there aren't any, `$GIT_DIR/remotes/<origin>` | |
| is consulted and its `Pull:` lines are used. | |
| In addition to the refspec formats described in the OPTIONS | |
| section, you can have a globbing refspec that looks like this: | |
| ------------ | |
| refs/heads/*:refs/remotes/origin/* | |
| ------------ | |
| A globbing refspec must have a non-empty RHS (i.e. must store | |
| what were fetched in remote-tracking branches), and its LHS and RHS | |
| must end with `/*`. The above specifies that all remote | |
| branches are tracked using remote-tracking branches in | |
| `refs/remotes/origin/` hierarchy under the same name. | |
| The rule to determine which remote branch to merge after | |
| fetching is a bit involved, in order not to break backward | |
| compatibility. | |
| If explicit refspecs were given on the command | |
| line of `git pull`, they are all merged. | |
| When no refspec was given on the command line, then `git pull` | |
| uses the refspec from the configuration or | |
| `$GIT_DIR/remotes/<origin>`. In such cases, the following | |
| rules apply: | |
| . If `branch.<name>.merge` configuration for the current | |
| branch _<name>_ exists, that is the name of the branch at the | |
| remote site that is merged. | |
| . If the refspec is a globbing one, nothing is merged. | |
| . Otherwise the remote branch of the first refspec is merged. | |
| EXAMPLES | |
| -------- | |
| * Update the remote-tracking branches for the repository | |
| you cloned from, then merge one of them into your | |
| current branch: | |
| + | |
| ------------------------------------------------ | |
| $ git pull | |
| $ git pull origin | |
| ------------------------------------------------ | |
| + | |
| Normally the branch merged in is the `HEAD` of the remote repository, | |
| but the choice is determined by the `branch.<name>.remote` and | |
| `branch.<name>.merge` options; see linkgit:git-config[1] for details. | |
| * Merge into the current branch the remote branch `next`: | |
| + | |
| ------------------------------------------------ | |
| $ git pull origin next | |
| ------------------------------------------------ | |
| + | |
| This leaves a copy of `next` temporarily in `FETCH_HEAD`, and | |
| updates the remote-tracking branch `origin/next`. | |
| The same can be done by invoking fetch and merge: | |
| + | |
| ------------------------------------------------ | |
| $ git fetch origin | |
| $ git merge origin/next | |
| ------------------------------------------------ | |
| If you tried a pull which resulted in complex conflicts and | |
| would want to start over, you can recover with `git reset`. | |
| include::transfer-data-leaks.adoc[] | |
| BUGS | |
| ---- | |
| Using `--recurse-submodules` can only fetch new commits in already checked | |
| out submodules right now. When e.g. upstream added a new submodule in the | |
| just fetched commits of the superproject the submodule itself cannot be | |
| fetched, making it impossible to check out that submodule later without | |
| having to do a fetch again. This is expected to be fixed in a future Git | |
| version. | |
| SEE ALSO | |
| -------- | |
| linkgit:git-fetch[1], linkgit:git-merge[1], linkgit:git-config[1] | |
| GIT | |
| --- | |
| Part of the linkgit:git[1] suite |