【问题标题】:Git: Use two branches with same name from different remotesGit:使用来自不同遥控器的两个具有相同名称的分支
【发布时间】:2020-01-24 14:31:34
【问题描述】:

我正在使用一个同时存在于 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,这不是我想要的,并且与上一个命令的输出不一致。
  4. 我现在可以执行git push gitlab master-gitlab:master,它将master-gitlab 推送到远程gitlabmaster。但是我总是忘记怎么做,而且不是很直观。

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

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

【问题讨论】:

  • 在您的第三点,我猜您的意思是它会创建一个名为 master-gitlab 的新远程分支?
  • 是的,谢谢,我已经改了。
  • 对于#3,我相信你想git push --set-upstream gitlab master,它应该永久设置它。 (抱歉,necro-bump,我正在搜索主题。)
  • 我不认为这是我想要的,因为它会将我的本地分支“master”(与 github 链接)推送到 gitlab。我想要的是两个不同的本地分支“master”(github)和“master-gitlab”,其中包含我项目的不同状态,一个与 github 链接,另一个与 gitlab 链接。

标签: git branch git-branch git-remote


【解决方案1】:

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

通常,推送配置与拉取配置分开设置。 (您可以查看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 的其他交互,因此我鼓励您查看文档并确保您了解行为差异以确定是否值得。

【讨论】:

  • 好的,谢谢。我不喜欢更改默认属性,因为这意味着我的命令和工作流程可能无法在其他机器上运行。那么在哪种情况下默认配置更有意义呢?在我看来,如果 git 之前告诉我我的本地分支正在跟踪远程的master,那么推送会创建一个新的远程分支,这简直是不一致和令人困惑的。
  • @klues - 好吧,从这个对话的角度来看,软件会做它做的事情;我们俩都没有写过 git,也都不会重写它,所以我们是否相信这些默认值是有意义的并不重要。但据我所知,默认设置对初学者来说是“安全的”(不一定是“最有用的”),并且期望更好地了解其用例的人会在适当的情况下更改设置。
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2016-11-08
  • 2013-07-25
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多