I'm used to using subtree pull <github> and conversely subtree push <localrepo>,
because I always want to sync with the latest published history, but if I'm pushing history, I want to push locally and to a target branch so I can iron out any merge problems before the change gets pushed publically.
subtree pull <github>
subtree push <localrepo>
This is because each repository with a sub-repo is effectively a unique branch deviating from $origin, and a plain push will thus likely be akin to "git push $origin -f "
So instead, I push the hydra of heads to a single repo to resolve merge problems locally.
I added a --remote flag for pull and push. (and --branch too). When push and pull are working as expected, these flags will give you what you want.