What's the difference between git pull and git fetch?
In the simplest terms, "git pull" does a "git fetch" followed by a "git merge".
You can do a "git fetch" at any time to update your local copy of a remote branch. This operation never changes any of your own branches and is safe to do without changing your working copy. I have even heard of people running "git fetch" periodically in a cron job in the background (although I wouldn't recommend doing this).
A "git pull" is what you would do to bring your repository up to date with a remote repository.
git-pull - Fetch from and merge with another repository or a local branch SYNOPSIS git pull … DESCRIPTION Runs git-fetch with the given parameters, and calls git-merge to merge the retrieved head(s) into the current branch. With --rebase, calls git-rebase instead of git-merge. Note that you can use . (current directory) as the <repository> to pull from the local repository — this is useful when merging local branches into the current branch. Also note that options meant for git-pull itself and underlying git-merge must be given before the options meant for git-fetch.
You would pull if you want the histories merged, you'd fetch if you just 'want the codez' as some person has been tagging some articles around here.
One use case of "git fetch" is that the following will tell you any changes in the remote branch since your last pull... so you can check before doing an actual pull, which could change files in your working copy.
git fetch
git diff ...origin
I found this well written article about git fetch and git pull it's worth the reading: http://longair.net/blog/2009/04/16/git-fetch-and-merge/