You can say `rebase=True` instead of `--rebase`, which frees this bit from needing to worry about getting the order of the positional arguments right.  It's good that we catch the exit status from `git pull --rebase`; folks that use the topic-branch workflow will probably hit that case.  This can be problematic when merging maintenance/topic branches, though.  We don't preserve merges, so if you're on master and you've merged an old maint topic, the very next thing we do is `pull --rebase` which throws away the merge.

I don't think this should use `git pull`.  Instead, `git fetch $remote`, and `git rebase --preserve-merges $tracking_branch` is probably the way to go.  If $remote is not configured, nor $tracking_branch, then bail.  I think that'll make the Sync mode useful for integrators that merge proper topic branches as well since we'll be preserving whatever merge the user intentionally made.  Thoughts?