我是否可以不小心同时推送多个Git功能分支?

时间:2018-11-08 15:12:30

标签: git git-push git-config

我已经使用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,当我最终将我的{{1]推入时,我将冒着将feature/onefeature/two重新推到GitHub的风险。 }}通过feature/three分支!

如果这种说法是正确的,不仅会令我震惊,还会使我大吃一惊!它是正确,错误还是部分正确,为什么?!

4 个答案:

答案 0 :(得分:3)

git不会自动推送分支。但是,当您进行push feature/three时,您当然会偶然地push错误的分支。例如,您可能不小心键入git push origin feature/one而不是git push origin feature/three。这与git没有任何关系,但这将是用户错误。例如,当您无意使用时,您也可能不小心使用了--all标志。

此外,如果您不小心将错误的branch推入,则只需在意识到自己的错误(remote branch)时删除git push origin :feature/one。由于remote branch已经是merged,因此不会对任何事物产生负面影响。

答案 1 :(得分:3)

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

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

当您显式地为push命令提供参数时,它会按照提示进行操作,但是通常情况下,人们会忘记默认设置是什么(或者只是忽略其存在),尝试进行推送,如果默认设置为将每个分支都推到其远程对应对象*,嗯...这可能正是您的同事通过“自动推送”提示的内容。

*自git 2.0起,标准从matching(将每个分支推到其对应分支)更改为simple(仅推动当前分支)。

答案 2 :(得分: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 :(得分:1)

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

git push :

来自git-push手册:

  

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