I use a gem called grb (https://rubygems.org/gems/grb) to do most of my branch maintenance. It adds 2 steps to the process of creating and tracking a new branch: pushing a ref head and then fetching the branch you're branching off of. It's a more complete algorithm, I think. It also has commands for adding remotes, deleting branches (locally and remotely), renaming branches, etc.
! grb new foo --explain
git push origin my_current_branch:refs/heads/foo
git fetch origin
git branch --track foo origin/foo
git checkout foo