Is there a better way to achieve the functionality of this alias? set-upstream = "!sh -c 'current=$(git symbolic-ref HEAD); git branch \"$current\" --set-upstream \"$1\"/$(basename $current)' -" (forgive me if stupid gmail word wrapped that line) This allows me to write $ git set-upstream origin instead of $ git branch <current branch> --set-upstream origin/<current branch> which is a pain to write for several reasons: I have to remember the current branch name, that name might be long, and shell autocomplete doesn't know about --set-upstream yet so won't complete the second occurrence. Having a dedicated script (or git command) rather than an alias would allow greater functionality like: - automatically pick the remote name if there's only one remote, - a flag to automatically set upstream on all branches (that having matching remotes) I don't understand why all my branches haven't automatically had the right upstream set anyway - am I missing some configuration of pull and push? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html