Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git: Use two branches with same name from different remotes

I'm using a repository which exists both on github and on an internal gitlab. I have set up two remotes: origin (github) and gitlab.

How can I easily interact with the branch master of both remotes?

What I've tried:

  1. git checkout --track gitlab/master -> error: A branch named 'master' already exists.
  2. git checkout -b master-gitlab --track gitlab/master -> worked, I now have a local branch master-gitlab and the console output tells me: master-gitlab set up to track remote branch master from gitlab. -> perfect, this is what I want!
  3. git push gitlab master-gitlab -> this creates a new remote branch master-gitlab on remote gitlab which is not what I want and inconsistent with the output of the last command.
  4. I can now do git push gitlab master-gitlab:master which pushes master-gitlab to master of the remote gitlab. But I always forget how to do this and it's not very intuitive.

Is there an easier way to track the master branch of a different remote and push to it?

Is this a git-bug that it first (3) is telling me tracking master and afterwards creating a new branch on push?

like image 914
klues Avatar asked Aug 14 '26 14:08

klues


1 Answers

It's not a bug in the sense that git is doing what the documentation says it will do. It also may not be the most intuitive result in this case, but with how many different ways there are to relate remote branches to local refs I don't really think there is a behavior that will be intuitive to everyone in every situation.

In general, push configuration is set separately from pull configuration. (You can see the git push documentation for a rundown of how it tries to figure out what to push where when you don't specify everything on the command line. https://git-scm.com/docs/git-push)

That said, the default push configuration does try to use the pull configuration if you are pushing to the default remote. You can configure push to always default to upstream configuration with

git config push.default upstream

Then you can push master-gitlab using just

git push

if it's checked out, and

git push gitlab master-gitlab

in any case. Of course since this changes a default setting, it could potentially affect your other interactions with gitlab, so I'd encourage you to review the docs and make sure you understand the differences in behavior to decide if it's worth it.

like image 74
Mark Adelsberger Avatar answered Aug 16 '26 11:08

Mark Adelsberger