为什么在Git中将推送到匹配的分支设置为默认行为?

5

默认情况下,Git会推送到“匹配”分支——与本地分支同名的远程分支,而不是“上游”分支——正在被跟踪的分支。对我来说,切换到“上游”模式更方便,这样我就不必每次都指定要推送到哪个分支了,但我认为“匹配”是有原因的默认设置。如果将设置为“匹配”,而不是“上游”设置,是否会出现任何问题呢?


2
“Hysterical Raisins”(这个有趣的拼写方式意为“历史原因”,同时也暗示着:没有真正好的理由)。Git 2.0中将更改默认设置,因此显然Git项目人员认为现有的默认设置不是最佳选择。 - torek
1
新的默认设置为Git 2.0(2014年第二季度)将被设置为“简单”:请参见下面的我的编辑答案 - VonC
1个回答

6
如同 "警告:push.default未设置;其隐含值在Git 2.0中发生更改" 所述: matching 意味着 git push 将会把本地所有分支推送到远程仓库中同名的分支。这将导致不小心推送了你并不想要的分支。这不是最佳实践,你不应该推送 所有 分支。大多数分支可能是测试或内部开发的私有分支。 simple (Git 2.0 默认) 意味着 git push 只会推送 当前分支 到 git pull 所从取的分支,并检查它们的名称是否匹配。默认情况下,它只会推送你正在工作的分支,仅当该分支在远程仓库中存在同名分支时(或者你显式地创建它)。
你可以在 "[git push - Default behavior?].2" 中找到更多关于该策略变更的讨论。
我在 "git - push current vs. push upstream (tracking)" 中描述了其他策略。
该新的默认策略现在已经合并到主分支 (commit 289ca27) 并在 commit 11037ee 中声明为新的默认值:
我们承诺将 "git push [there]" 的行为从 Git 2.0 中的 "matching" 更改为 "simple",而不需要在命令行上指定要推送的内容。这最终实现了该更改。

我认为他们之所以进行简单的名称匹配检查,而不是直接使用上游,肯定有一些原因。 - Casebash
@Casebash 主要是为了强制用户使用一致的分支命名约定(即在本地和远程上相同),而不是在一侧使用一个名称,在上游分支中使用不同的名称。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接