git pull command
Fetch from and integrate with another repository or a local branch.
Overview
git pull
is a command that fetches changes from a remote repository and integrates them into the current branch. It's essentially a combination of git fetch
followed by git merge
or git rebase
, depending on configuration. This command is commonly used to update your local repository with changes made by others.
Options
--all
Fetch all remotes.
$ git pull --all
Fetching origin
Updating 3e4f123..8a9b012
Fast-forward
README.md | 5 +++++
1 file changed, 5 insertions(+)
-r, --rebase[=false|true|merges|interactive]
Rebase the current branch on top of the upstream branch after fetching, instead of merging.
$ git pull --rebase
Successfully rebased and updated refs/heads/main.
-v, --verbose
Be more verbose.
$ git pull -v
From https://github.com/user/repo
* branch main -> FETCH_HEAD
Updating 3e4f123..8a9b012
Fast-forward
README.md | 5 +++++
1 file changed, 5 insertions(+)
--ff, --no-ff
When the merge resolves as a fast-forward, only update the branch pointer, without creating a merge commit. With --no-ff create a merge commit even when the merge resolves as a fast-forward.
$ git pull --no-ff
From https://github.com/user/repo
* branch main -> FETCH_HEAD
Merge made by the 'recursive' strategy.
README.md | 5 +++++
1 file changed, 5 insertions(+)
--ff-only
Only fast-forward if possible. If not, exit with a non-zero status.
$ git pull --ff-only
fatal: Not possible to fast-forward, aborting.
-q, --quiet
Be quiet. Only report errors.
$ git pull -q
Usage Examples
Basic pull from origin
$ git pull
From https://github.com/user/repo
* branch main -> FETCH_HEAD
Updating 3e4f123..8a9b012
Fast-forward
README.md | 5 +++++
1 file changed, 5 insertions(+)
Pull from a specific remote and branch
$ git pull upstream feature-branch
From https://github.com/upstream/repo
* branch feature-branch -> FETCH_HEAD
Updating 3e4f123..8a9b012
Fast-forward
feature.js | 15 +++++++++++++++
1 file changed, 15 insertions(+)
Pull with rebase instead of merge
$ git pull --rebase origin main
From https://github.com/user/repo
* branch main -> FETCH_HEAD
Successfully rebased and updated refs/heads/main.
Tips:
Always commit or stash changes before pulling
Make sure your working directory is clean before running git pull
to avoid conflicts with uncommitted changes.
Use --rebase
for cleaner history
Using git pull --rebase
creates a linear history without merge commits, which can make the commit history easier to follow.
Configure default pull behavior
You can set your default pull strategy with:
$ git config --global pull.rebase true # For rebase
$ git config --global pull.ff only # For fast-forward only
Check what will be pulled first
Use git fetch
followed by git log HEAD..origin/main
to see what changes will be pulled before actually pulling them.
Frequently Asked Questions
Q1. What's the difference between git pull
and git fetch
?
A. git fetch
only downloads new data from a remote repository but doesn't integrate changes into your working files. git pull
does both: it fetches and then automatically merges or rebases.
Q2. How do I undo a git pull?
A. You can use git reset --hard ORIG_HEAD
to undo the last pull and reset your branch to where it was before pulling.
Q3. Why am I getting merge conflicts when pulling?
A. Conflicts occur when the same part of a file has been modified both remotely and locally. You need to resolve these conflicts manually by editing the conflicted files.
Q4. How can I pull without merging?
A. Use git fetch
instead of git pull
to download changes without merging them.
Q5. What does "fast-forward" mean in git pull?
A. A fast-forward merge happens when the current branch's pointer can simply be moved forward to point to the incoming commit, without needing to create a merge commit.
References
https://git-scm.com/docs/git-pull
Revisions
- 2025/05/05 First revision