我是否会不小心同时推送多个 Git 功能分支?
Can I accidentally push more than one Git feature branch at the same time?
我已经使用 git
几年了,所以我会说我是 "comfortable",但绝不是专家。
开始了一份新工作,我的开发主管试图告诉我,如果我不定期 delete/prune 我的本地功能分支使用 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
,我 运行 有将 feature/one
和 feature/two
重新推送到 GitHub 的风险当我最终通过 git push
!
推送我的 feature/three
分支时
这个说法,如果是真的,不仅会让我震惊,还会让我大吃一惊!它是对的,错的,还是部分正确的,为什么?!
git
不会自动推送分支。但是你当然可能不小心 push the incorrect branch when you do push feature/three
。例如,您可能不小心键入 git push origin feature/one
而不是 git push origin feature/three
。这与 git
没有任何关系,但这将是一个用户错误。例如,您也可能在无意中意外使用了 --all
标志。
此外,如果您不小心推错了branch
,那么当您意识到自己的错误(git push origin :feature/one
)时,只需删除remote branch
即可。由于 remote branch
已经 merged
,因此不会产生任何负面影响。
这也可能与 git 配置中的 push.default
设置有关(请参阅详细文档 here)。
基本上,它用于设置 git push
(无参数)的预期行为。
当您显式地为 push 命令提供参数时,它会按照它所说的那样进行,但通常情况下人们会忘记他们的默认设置是什么(或者只是忽略它的存在),尝试推送,如果他们的默认设置是将每个分支推送到它的远程分支*,好吧......这可能正是你的同事用这个 "auto-push" 暗示的东西。
* 自 git 2.0 起,标准从 matching
(将每个分支推送到对应分支)更改为 simple
(仅推送当前分支)。
自 Git 2.0 起,默认 push.default
配置设置为 simple
。如果当前分支与远程跟踪分支连接并且名称匹配,则仅推送当前分支:https://git-scm.com/docs/git-config.
之前,在 Git 1.x 中,默认值为 matching
。使用此配置,所有具有相同名称的远程跟踪分支的本地分支都被推送到一起。如果您有陈旧的远程跟踪分支,可能会发生 git push
重新创建已删除的远程分支。
也许您的开发负责人仍在 Git 1.x。或者您的团队决定使用旧的 matching
行为作为默认行为。
除了别人说的你可能不小心执行了
git push :
来自git-推送手册:
The special refspec : (or +: to allow non-fast-forward updates) directs Git to push "matching" branches: for every branch that exists on the local side, the remote side is updated if a branch of the same name already exists on the remote side.
我已经使用 git
几年了,所以我会说我是 "comfortable",但绝不是专家。
开始了一份新工作,我的开发主管试图告诉我,如果我不定期 delete/prune 我的本地功能分支使用 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
,我 运行 有将 feature/one
和 feature/two
重新推送到 GitHub 的风险当我最终通过 git push
!
feature/three
分支时
这个说法,如果是真的,不仅会让我震惊,还会让我大吃一惊!它是对的,错的,还是部分正确的,为什么?!
git
不会自动推送分支。但是你当然可能不小心 push the incorrect branch when you do push feature/three
。例如,您可能不小心键入 git push origin feature/one
而不是 git push origin feature/three
。这与 git
没有任何关系,但这将是一个用户错误。例如,您也可能在无意中意外使用了 --all
标志。
此外,如果您不小心推错了branch
,那么当您意识到自己的错误(git push origin :feature/one
)时,只需删除remote branch
即可。由于 remote branch
已经 merged
,因此不会产生任何负面影响。
这也可能与 git 配置中的 push.default
设置有关(请参阅详细文档 here)。
基本上,它用于设置 git push
(无参数)的预期行为。
当您显式地为 push 命令提供参数时,它会按照它所说的那样进行,但通常情况下人们会忘记他们的默认设置是什么(或者只是忽略它的存在),尝试推送,如果他们的默认设置是将每个分支推送到它的远程分支*,好吧......这可能正是你的同事用这个 "auto-push" 暗示的东西。
* 自 git 2.0 起,标准从 matching
(将每个分支推送到对应分支)更改为 simple
(仅推送当前分支)。
自 Git 2.0 起,默认 push.default
配置设置为 simple
。如果当前分支与远程跟踪分支连接并且名称匹配,则仅推送当前分支:https://git-scm.com/docs/git-config.
之前,在 Git 1.x 中,默认值为 matching
。使用此配置,所有具有相同名称的远程跟踪分支的本地分支都被推送到一起。如果您有陈旧的远程跟踪分支,可能会发生 git push
重新创建已删除的远程分支。
也许您的开发负责人仍在 Git 1.x。或者您的团队决定使用旧的 matching
行为作为默认行为。
除了别人说的你可能不小心执行了
git push :
来自git-推送手册:
The special refspec : (or +: to allow non-fast-forward updates) directs Git to push "matching" branches: for every branch that exists on the local side, the remote side is updated if a branch of the same name already exists on the remote side.