Git: 使用两个来自不同远程的同名分支

Git: Use two branches with same name from different remotes

我使用的存储库既存在于 github 上,也存在于内部 gitlab 上。 我设置了两个遥控器:origin (github) 和 gitlab.

如何轻松地与两个遥控器的分支 master 交互?

我尝试过的:

  1. git checkout --track gitlab/master -> 错误:A branch named 'master' already exists.
  2. git checkout -b master-gitlab --track gitlab/master -> 成功了,我现在有一个本地分支 master-gitlab 并且控制台输出告诉我:master-gitlab set up to track remote branch master from gitlab. -> 完美,这就是我想要的!
  3. git push gitlab master-gitlab -> 这会在远程 gitlab 上创建一个 新的远程分支 master-gitlab,这 不是我想要的want与上次命令的输出不一致
  4. 我现在可以执行 git push gitlab master-gitlab:master,将 master-gitlab 推送到远程 gitlabmaster。但是我总是忘记怎么做,而且不是很直观。

是否有更简单的方法来跟踪不同遥控器的 master 分支并推送到它?

这是一个 git-bug,它首先 (3) 告诉我跟踪 master 然后在推送时创建一个新分支?

从 git 正在执行文档所说的操作的意义上说,这不是错误。在这种情况下,它也可能不是最直观的结果,但是有多少种不同的方法可以将远程分支与本地引用相关联,我真的不认为在任何情况下都有一种行为对每个人都是直观的。

一般情况下,推送配置与拉取配置是分开设置的。 (您可以查看 git push 文档,了解当您未在命令行上指定所有内容时,它如何尝试找出将内容推送到哪里的概要。https://git-scm.com/docs/git-push

也就是说,默认 推送配置会尝试使用拉取配置如果 您正在推送到默认远程。您可以将 push 配置为始终默认使用

的上游配置
git config push.default upstream

然后你可以使用

推送 master-gitlab
git push

如果已签出,并且

git push gitlab master-gitlab

无论如何。当然,由于这会更改默认设置,它可能会影响您与 gitlab 的其他交互,因此我鼓励您查看文档并确保您了解行为上的差异以决定是否值得。