'\" t .\" Title: git-pull .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: Git Manual .\" Source: Git 2.55.0 .\" Language: English .\" .TH "GIT\-PULL" "1" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" git-pull \- Fetch from and integrate with another repository or a local branch .SH "SYNOPSIS" .sp .nf \fBgit\fR \fBpull\fR [\fI\fR] [\fI\fR [\fI\fR\&...]] .fi .sp .SH "DESCRIPTION" .sp Integrate changes from a remote repository into the current branch\&. .sp First, \fBgit\fR \fBpull\fR runs \fBgit\fR \fBfetch\fR with the same arguments (excluding merge options) to fetch remote branch(es)\&. Then it decides which remote branch to integrate: if you run \fBgit\fR \fBpull\fR with no arguments this defaults to the upstream for the current branch\&. Then it integrates that branch into the current branch\&. .sp There are 4 main options for integrating the remote branch: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} \fBgit\fR \fBpull\fR \fB\-\-ff\-only\fR will only do "fast\-forward" updates: it fails if your local branch has diverged from the remote branch\&. This is the default\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} \fBgit\fR \fBpull\fR \fB\-\-rebase\fR runs \fBgit\fR \fBrebase\fR .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} \fBgit\fR \fBpull\fR \fB\-\-no\-rebase\fR runs \fBgit\fR \fBmerge\fR\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 4.\h'+01'\c .\} .el \{\ .sp -1 .IP " 4." 4.2 .\} \fBgit\fR \fBpull\fR \fB\-\-squash\fR runs \fBgit\fR \fBmerge\fR \fB\-\-squash\fR .RE .sp You can also set the configuration options \fBpull\&.rebase\fR, \fBpull\&.squash\fR, or \fBpull\&.ff\fR with your preferred behaviour\&. .sp If there\(cqs a merge conflict during the merge or rebase that you don\(cqt want to handle, you can safely abort it with \fBgit\fR \fBmerge\fR \fB\-\-abort\fR or \fBgit\fR \fBrebase\fR \fB\-\-abort\fR\&. .SH "OPTIONS" .PP \fI\fR .RS 4 The "remote" repository to pull from\&. This can be either a URL (see the section GIT URLS below) or the name of a remote (see the section REMOTES below)\&. .sp Defaults to the configured upstream for the current branch, or \fBorigin\fR\&. See UPSTREAM BRANCHES below for more on how to configure upstreams\&. .RE .PP \fI\fR .RS 4 Which branch or other reference(s) to fetch and integrate into the current branch, for example \fBmain\fR in \fBgit\fR \fBpull\fR \fBorigin\fR \fBmain\fR\&. Defaults to the configured upstream for the current branch\&. .sp This can be a branch, tag, or other collection of reference(s)\&. See \fI\fR below under "Options related to fetching" for the full syntax, and DEFAULT BEHAVIOUR below for how \fBgit\fR \fBpull\fR uses this argument to determine which remote branch to integrate\&. .RE .PP \fB\-q\fR, \fB\-\-quiet\fR .RS 4 This is passed to both underlying git\-fetch to squelch reporting of during transfer, and underlying git\-merge to squelch output during merging\&. .RE .PP \fB\-v\fR, \fB\-\-verbose\fR .RS 4 Pass \fB\-\-verbose\fR to git\-fetch and git\-merge\&. .RE .PP \fB\-\-recurse\-submodules\fR[\fB=\fR(\fByes\fR|\fBon\-demand\fR|\fBno\fR)], \fB\-\-no\-recurse\-submodules\fR .RS 4 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 \fBgit-fetch\fR(1), \fBgit-config\fR(1) and \fBgitmodules\fR(5))\&. .sp If the checkout is done via rebase, local submodule commits are rebased as well\&. .sp If the update is done via merge, the submodule conflicts are resolved and checked out\&. .RE .SS "Options related to merging" .PP \fB\-\-commit\fR, \fB\-\-no\-commit\fR .RS 4 Perform the merge and commit the result\&. This option can be used to override \fB\-\-no\-commit\fR\&. Only useful when merging\&. .sp With \fB\-\-no\-commit\fR perform the merge and stop just before creating a merge commit, to give the user a chance to inspect and further tweak the merge result before committing\&. .sp Note that fast\-forward updates do not create a merge commit and therefore there is no way to stop those merges with \fB\-\-no\-commit\fR\&. Thus, if you want to ensure your branch is not changed or updated by the merge command, use \fB\-\-no\-ff\fR with \fB\-\-no\-commit\fR\&. .RE .PP \fB\-\-edit\fR, \fB\-e\fR, \fB\-\-no\-edit\fR .RS 4 Invoke an editor before committing successful mechanical merge to further edit the auto\-generated merge message, so that the user can explain and justify the merge\&. The \fB\-\-no\-edit\fR option can be used to accept the auto\-generated message (this is generally discouraged)\&. .sp Older scripts may depend on the historical behaviour of not allowing the user to edit the merge log message\&. They will see an editor opened when they run \fBgit\fR \fBmerge\fR\&. To make it easier to adjust such scripts to the updated behaviour, the environment variable \fBGIT_MERGE_AUTOEDIT\fR can be set to \fBno\fR at the beginning of them\&. .RE .PP \fB\-\-cleanup=\fR\fI\fR .RS 4 This option determines how the merge message will be cleaned up before committing\&. See \fBgit-commit\fR(1) for more details\&. In addition, if the \fI\fR is given a value of \fBscissors\fR, scissors will be appended to \fBMERGE_MSG\fR before being passed on to the commit machinery in the case of a merge conflict\&. .RE .PP \fB\-\-ff\-only\fR .RS 4 Only update to the new history if there is no divergent local history\&. This is the default when no method for reconciling divergent histories is provided (via the \fB\-\-rebase\fR flags)\&. .RE .PP \fB\-\-ff\fR, \fB\-\-no\-ff\fR .RS 4 When merging rather than rebasing, specifies how a merge is handled when the merged\-in history is already a descendant of the current history\&. If merging is requested, \fB\-\-ff\fR is the default unless merging an annotated (and possibly signed) tag that is not stored in its natural place in the \fBrefs/tags/\fR hierarchy, in which case \fB\-\-no\-ff\fR is assumed\&. .sp With \fB\-\-ff\fR, when possible resolve the merge as a fast\-forward (only update the branch pointer to match the merged branch; do not create a merge commit)\&. When not possible (when the merged\-in history is not a descendant of the current history), create a merge commit\&. .sp With \fB\-\-no\-ff\fR, create a merge commit in all cases, even when the merge could instead be resolved as a fast\-forward\&. .RE .PP \fB\-S\fR[\fI\fR], \fB\-\-gpg\-sign\fR[\fB=\fR\fI\fR], \fB\-\-no\-gpg\-sign\fR .RS 4 GPG\-sign the resulting merge commit\&. The \fI\fR argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space\&. \fB\-\-no\-gpg\-sign\fR is useful to countermand both \fBcommit\&.gpgSign\fR configuration variable, and earlier \fB\-\-gpg\-sign\fR\&. .RE .PP \fB\-\-log\fR[\fB=\fR\fI\fR], \fB\-\-no\-log\fR .RS 4 In addition to branch names, populate the log message with one\-line descriptions from at most \fI\fR actual commits that are being merged\&. See also \fBgit-fmt-merge-msg\fR(1)\&. Only useful when merging\&. .sp With \fB\-\-no\-log\fR do not list one\-line descriptions from the actual commits being merged\&. .RE .PP \fB\-\-signoff\fR, \fB\-\-no\-signoff\fR .RS 4 Add a \fBSigned\-off\-by\fR trailer by the committer at the end of the commit log message\&. The meaning of a signoff depends on the project to which you\(cqre committing\&. For example, it may certify that the committer has the rights to submit the work under the project\(cqs license or agrees to some contributor representation, such as a Developer Certificate of Origin\&. (See \m[blue]\fBhttps://developercertificate\&.org\fR\m[] for the one used by the Linux kernel and Git projects\&.) Consult the documentation or leadership of the project to which you\(cqre contributing to understand how the signoffs are used in that project\&. .sp The \fB\-\-no\-signoff\fR option can be used to countermand an earlier \fB\-\-signoff\fR option on the command line\&. .sp Git does not (and will not) have a configuration variable to enable the \fB\-\-signoff\fR command line option by default; see the \fBcommit\&.signoff\fR entry in \fBgitfaq\fR(7) for more details\&. .RE .PP \fB\-\-stat\fR, \fB\-n\fR, \fB\-\-no\-stat\fR .RS 4 Show a diffstat at the end of the merge\&. The diffstat is also controlled by the configuration option merge\&.stat\&. .sp With \fB\-n\fR or \fB\-\-no\-stat\fR do not show a diffstat at the end of the merge\&. .RE .PP \fB\-\-compact\-summary\fR .RS 4 Show a compact\-summary at the end of the merge\&. .RE .PP \fB\-\-squash\fR, \fB\-\-no\-squash\fR .RS 4 Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit, move the \fBHEAD\fR, or record \fB$GIT_DIR/MERGE_HEAD\fR (to cause the next \fBgit\fR \fBcommit\fR command to create a merge commit)\&. This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus)\&. .sp With \fB\-\-no\-squash\fR perform the merge and commit the result\&. This option can be used to override \fB\-\-squash\fR\&. .sp With \fB\-\-squash\fR, \fB\-\-commit\fR is not allowed, and will fail\&. .sp Only useful when merging\&. .RE .PP \fB\-\-verify\fR, \fB\-\-no\-verify\fR .RS 4 By default, the pre\-merge and commit\-msg hooks are run\&. When \fB\-\-no\-verify\fR is given, these are bypassed\&. See also \fBgithooks\fR(5)\&. Only useful when merging\&. .RE .PP \fB\-s\fR \fI\fR, \fB\-\-strategy=\fR\fI\fR .RS 4 Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried\&. If there is no \fB\-s\fR option, a built\-in list of strategies is used instead (\fBort\fR when merging a single head, \fBoctopus\fR otherwise)\&. .RE .PP \fB\-X\fR \fI