Git fetch or pull?

I've been unsure for some time now what it is that git fetch does. And often when I speak with my colleagues, the conversation goes something like this:

D1 - okay, so now, before we merge (or rebase) we better make sure that the branch is up to date.
D2 - Yeah, right, I think it is.
D1 - Hmmm, well just to be sure, lets just check out that branch a do a git pull.
D2 - Yeah, sure. But isn't it enough to just do a git fetch?
D1 - ... I'm not sure, maybe. I always just do a git pull just to be sure.

Sometimes I'm D1 and sometimes I'm D2. Honestly I've never really taken the time to learn what git fetch does. I don't do it often enough to actually put the time and effort into understanding the differences. Until today.

Let's start with git fetch and how I understand it. Basically doing a fetch is like asking the remote repo what has changed in the branches that I'm tracking from the remote repo. We just say that we wan't to know what has changed.

When we do a git pull we do ask what has changed, but we also apply those changes to the current branch that we're in since pull is context aware. We could also pull changes from another branch into the current if we want, by specifying the branch that we wich to pull git pull <branch-name>, but that isn't something I intend to do anytime soon.

So it seems to me, like I will stick with checking out the branch that I wish to add changes to and make sure it is up to date by doing a git pull.