The objective of both these commands is the same - to get updates from the remote repository to my local repository.
But, they work in a different way.
Git pull: when you do a git pull, it gets all the changes from the remote or central repository and attaches it to your corresponding branch in your local repository.
Git fetch: when you do a git fetch, it gets all the changes from the remote repository, stores the changes in a separate branch in your local repository and if you want to reflect those changes in your corresponding branches, use a git merge to do that.
To summarize,
git pull = git fetch + git merge