What is the difference between fetch and pull?

The two commands are similar in that they download new data from the remote. However, while git-fetch can be called multiple times without affecting the local working copy, git-pull will do a bit more work, updating the local HEAD with the data it downloaded.

In other words, git-pull performs a git-fetch followed by a git merge FETCH_HEAD.

# fetch from origin
$ git fetch origin 
From REMOTE_URL
   af74f3043..b0a88d920  master -> origin/master
# pull to local branch
$ git pull origin master
From REMOTE_URL
 * branch                master -> FETCH_HEAD
Removing oldfile.txt
Auto-merging existingfile.txt

When attempting to perform a git-pull in a local branch that may cause conflicts while merging, your repository will be left in a staging state until the conflicts are resolved.

# pull to local branch
$ git pull origin master
From REMOTE_URL
 * branch                master -> FETCH_HEAD
Removing oldfile.txt
Auto-merging existingfile.txt
CONFLICT (content): Merge conflict in anotherexistingfile.txt

Check the Full Documentation for both git-fetch and git-pull for more options.