Answer
In the simplest terms, git pull does a git fetch followed by a git merge.
git fetch updates your remote-tracking branches under refs/remotes/<remote>/. This operation is safe to run at any time since it never changes any of your local branches under refs/heads.
git pull brings a local branch up-to-date with its remote version, while also updating your other remote-tracking branches.
From the Git documentation for git pull:
git pullrunsgit fetchwith the given parameters and then depending on configuration options or command line flags, will call eithergit rebaseorgit mergeto reconcile diverging branches.