我可以意外地同时推送多个Git功能分支吗?

问题描述 投票:1回答:4

我已经使用git几年了,所以我说我对它“感到舒服”,但绝不是专家。

开始一份新工作,我的开发主管试图告诉我,如果我不使用git remote update origin --prune定期删除/修剪我的本地功能分支,git会在推送其他功能分支时偶尔自动推送它们!

作为他在这里所说的一个例子,假设我有一个名为myproject的项目,它有以下分支:

  • master
  • develop
  • feature/one
  • feature/two
  • feature/three

让我们说feature/onefeature/two已经老了,已经被推到GitHub,合并到develop,并从GitHub(原点)删除。 feature/three是我目前正在研究的。

他说,如果我不定期git remote update origin --prune,当我最终通过feature/one推进我的feature/two分支时,我冒着将feature/threegit push重新推向GitHub的风险!

这句话如果属实,不仅会震惊我,还会让我惊慌失措!它是真的,错误的还是部分正确的,为什么?!

git git-push git-config
4个回答
2
投票

从Git 2.0开始,默认的push.default配置设置为simple。如果当前分支与远程跟踪分支连接且名称匹配,则仅推送当前分支:https://git-scm.com/docs/git-config

之前,在Git 1.x.中,默认值为matching。通过此配置,所有具有相同命名远程跟踪分支的本地分支被一起推送。如果您有过时的远程跟踪分支,可能会发生,git push重新创建了一个已删除的远程分支。

也许你的开发领导仍然是Git 1.x.或者你的团队决定使用旧的matching行为作为默认行为。


3
投票

git不会自动推动分支机构。但是当你做push push时,你当然可能不小心feature/three不正确的分支。例如,您可能会意外键入git push origin feature/one而不是git push origin feature/three。这与git没有任何关系,但这将是一个用户错误。例如,当您不打算使用时,您也可能会意外地使用--all标志。

此外,如果你不小心推错了branch,那么当你意识到你的错误时,只需删除remote branchgit push origin :feature/one)。由于remote branch已经是merged,它不会对任何事情产生负面影响。


3
投票

这也可以与你的git配置中的push.default设置有关(参见详细的文档here)。

基本上,它用于设置git push(无参数)的预期行为。

当你明确地给push命令提供参数时,它会按照它的说法继续进行,但通常情况是人们会忘记它们的默认设置(或者只是忽略它的存在),尝试推送,如果它们的默认设置是推送每个分支对于它的远程对手*,嗯......这可能只是你的同事用这种“自动推送”的东西暗示的。

*标准从matching(推动每个分支到其对应的)到simple(只是推送当前分支)从git 2.0改变。


1
投票

除了别人说的你可能会意外执行

git push :

从git-push手册:

特殊refspec :(或+:允许非快进更新)指示Git推送“匹配”分支:对于本地端存在的每个分支,如果已经存在同名分支,则更新远程端在偏远的一边。

© www.soinside.com 2019 - 2024. All rights reserved.