You can track and checkout a remote branch in just one command:
git checkout -t origin/foo
git checkout foo
git rebase master
I don't like rebases when it is for a bunch of commits, it gives a straight version graph which everyone likes. But when you have conflicts, might have to fix them more than once.
From what I know, rebase creates a patch for each commit and then starts applying them on top of your master (if you are doing it on top of master). So, this has the unintended consequence of causing merge conflicts for multiple commits. With merging you just have resolve conflicts once.