There are three ways to merge branches:
merge fast forward merge rebasegit merge <remote> <branch> and git pull <remote>/<branch> AFAIK are the same thing and are both merges.
git pull --rebase <remote> <branch> is a proper rebase. This is the one you should prefer to avoid having 'merge commits'.
A fast forward merge is really similar to a rebase, and you do that with a -ff flag to merge, ie: git merge -ff <remote> <branch>
There is also a proper 'rebase' that can be done. AFAIK these two are the same:
git pull --rebase <remote> <branch> and git rebase <remote> <branch>
Unfortunately it is fundamentally a bit confusing as it depends on exactly how the rebase is done and with which flags. This is a place where a GUI can get in the way.