我已经使用git
几年了,所以我说我对此感到“舒适”,但绝不是专家。
开始了新工作,我的开发负责人试图告诉我,如果我不定期使用git remote update origin --prune
删除/修剪本地功能分支,git
将自动推送它们偶尔按下其他功能分支时!!
以他在这里所说的例子为例,假设我有一个名为myproject
的项目,该项目具有以下分支:
master
develop
feature/one
feature/two
feature/three
假设feature/one
和feature/two
很旧,已经被推送到GitHub,合并到develop
,并从GitHub(起源)中删除。 feature/three
是我目前正在从事的工作。
他是说,如果我不定期git remote update origin --prune
,当我最终将我的{{1]推入时,我将冒着将feature/one
和feature/two
重新推到GitHub的风险。 }}通过feature/three
分支!
如果这种说法是正确的,不仅会令我震惊,还会使我大吃一惊!它是正确,错误还是部分正确,为什么?!
答案 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推送“匹配”分支:对于本地端存在的每个分支,如果相同端的一个分支,则更新远程端名称已经在远端。