Fetch downloads new commits from the remote but leaves your working branch untouched. Pull does the same download, then immediately merges those commits into your current branch.
Think of fetch as looking before you leap. It updates your remote-tracking branches, like origin/main, so you can inspect what changed with git log or a diff. Your own work stays exactly where it was.
Pull is the convenience combo: git fetch followed by git merge in one command. It is faster for routine updates but can surprise you with an unexpected merge or conflict mid-task. Many people fetch first, review the incoming changes, then decide whether to merge or rebase. That habit avoids pulling half-finished work on top of your own.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.