Rebasing is a great tool, but it works best when you use it to create fast-forward merges for topic branches onto master. For example, you might rebase your add-new-widget branch against master:
git checkout add-new-widget
git rebase -i master
before performing a fast-forward merge of the branch into master. For example:
git checkout master
git merge --ff-only add-new-widget
The benefit of this is that your history won’t have a lot of complex merge commits or merge conflicts, because all your changes will be rebased onto the tip of master before the merge. A secondary benefit is that you’ve rebased, but you don’t have to use git push --force because you are not clobbering history on the master branch.
That’s certainly not the only use case for rebase, or the only workflow, but it’s one of the more sensible uses for it that I’ve seen. YMMV.