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

Git:使用来自不同远程的两个同名分支,git,branch,git-branch,git-remote,Git,Branch,Git Branch,Git Remote,我使用的存储库既存在于github上,也存在于内部gitlab上。 我设置了两个遥控器:origin(github)和gitlab 如何轻松地与两个遥控器的分支主机进行交互? 我所尝试的: git签出--跟踪gitlab/master->错误:名为“master”的分支已存在。 git checkout-b master gitlab--track gitlab/master->成功了,我现在有了一个本地分支master gitlab,控制台输出告诉我:master gitlab设置为从gitl

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

如何轻松地与两个遥控器的分支
主机进行交互?

我所尝试的:

  • git签出--跟踪gitlab/master
    ->错误:
    名为“master”的分支已存在。
  • git checkout-b master gitlab--track gitlab/master
    ->成功了,我现在有了一个本地分支
    master gitlab
    ,控制台输出告诉我:
    master gitlab设置为从gitlab跟踪远程分支master。
    ->完美,这就是我想要的
  • git push gitlab master gitlab
    ->这会在远程
    gitlab
    上创建一个新的远程分支
    master gitlab
    ,该分支不是我想要的,并且与上一个命令的输出不一致
  • 我现在可以执行
    git推送gitlab master gitlab:master
    ,它将
    master gitlab
    推送到远程
    gitlab
    master
    。但我总是忘记怎么做,这不是很直观
  • 是否有更简单的方法来跟踪不同遥控器的
    主机
    分支并将其推入?


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

    这不是一个bug,因为git正在做文档中说它将要做的事情。在这种情况下,这也可能不是最直观的结果,但是有多少种不同的方式将远程分支与本地ref关联起来,我真的不认为在任何情况下都有一种行为对每个人都是直观的

    通常,推送配置与拉送配置分开设置。(您可以查看
    gitpush
    文档,了解当您没有在命令行上指定所有内容时,gitpush是如何尝试确定将什么内容推送到何处的。)

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

    git config push.default upstream
    
    然后,只需使用

    git push
    
    如果已经结帐,以及

    git push gitlab master-gitlab
    

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

    在您的第三点,我猜您的意思是它创建了一个名为master gitlab的新远程分支?是的,谢谢,我改了。好的,谢谢。我不喜欢更改默认属性,因为这意味着我的命令和工作流可能无法在其他机器上工作。那么在哪种情况下,默认配置更有意义呢?在我看来,如果git之前告诉我我的本地分支正在跟踪远程分支的
    master
    ,push会创建一个新的远程分支,这是不一致和令人困惑的。@klues-好吧,为了正确地理解这个对话,软件会做它所做的;我们两人都没有编写git,也都不会重写它,所以我们是否确信默认值是合理的并不重要。但就我的理解而言,默认设置对初学者来说是“安全的”(不一定是“最有用的”),并且期望更好地理解其用例的人会在适当的情况下更改设置。