git fetch is actually automatically performed when you run
git pull. Why would you ever use a fetch command then?
When we perform a git fetch, we are gathering all the commits from the remote branch that is not in our current branch and storing them in our local repository. Fetching does not merge those commits with our current branch.
In more technical terms,
git fetch will move the
FETCH_HEAD pointer to the latest remote commit. The
HEAD pointer will continue to point to the current commit in your working tree. After you perform a merge, the
HEAD pointer will reference the same commit as
This command is useful for checking whether there has been any commits to the remote branch. Furthermore, you can use
git fetch --all to fetch all remotes.
The git pull command performs a
git fetch and then a
git merge. This will merge all remote commits with any commits you may have made locally.
git pull will fetch all remote commits, move the
FETCH_HEAD pointer to the latest remote commit, attempt to merge those commits with any changes you may have made, and then move the
HEAD pointer to the latest merge commit.
This command is useful for when you know there are changes on the remote branch and you wish to merge them in with your local branch. Be careful of using this when you also have changes as you may break the things you were working on!
Depending on your situation, a rebase may be more beneficial than fetching periodically and then merging when your work is complete.
Also, check out my other post if you are looking to keep a fork in sync!