Tracking a git branch with a different name both ways
Posted by matijs 24/05/2025 at 08h49
You want to work on some project, but they use a branch named dog
and you
want to use cat
instead. So you go:
git checkout dog
git switch -c cat
git branch --set-upstream-to=origin/dog
git branch -d dog
Your local branch is now cat
and it tracks dog
. Whenever your dog-loving
friends push their work, you can just use
git pull --rebase
and your cat
branch will be updated with the new commits in origin/dog
.
Now, the time comes to push your own work, and you go:
git push
Now, however, something perhaps unexpected happens. Instead of your commits
getting pushed to dog
, a new branch cat
is created in the remote
repository. That’s not what you wanted!
To make this work properly, you have to change git’s configuration:
git config set --global push.default upstream
From the git config
man page, this setting will:
push the current branch back to the branch whose changes are usually integrated into the current branch
In other words this pushes to the branch set with --set-upstream-to
, which
normally only affects pulling.
Now git push
will push your cat
branch to the remote origin/dog
branch,
allowing cat people and dog people to work together peacefully.
PS: With this push setting, pushing a branch without an equivalent upstream
will fail. To instead make git push
create an upstream branch for you, set:
git config set --global push.autoSetupRemote true