git push不要求设置上游,即使未设置上游

git push不要求设置上游,即使未设置上游,git,Git,我有master分支,并设置了以下配置 branch.master.remote=github branch.master.merge=refs/heads/master push.default=simple 现在我想测试push.default的行为。是的 git branch master1 // This created a new branch on same commit as master git checkout master1 git push github 现在,因为我的

我有
master
分支,并设置了以下配置

branch.master.remote=github
branch.master.merge=refs/heads/master
push.default=simple
现在我想测试
push.default
的行为。是的

git branch master1 // This created a new branch on same commit as master
git checkout master1
git push github
现在,因为我的本地分支名称是
master1
,并且是新分支,所以它没有任何上游设置。为什么没有
git push github
向我显示错误消息以使用
--设置上游
标志? 此外,它还成功地在远程回购上创建了
master1
分支。此外,在运行
git branch-vv

  master  42f18f8 [github/master] Some message
  master1 42f18f8 Some message
然而,如果我刚刚在
master1
分支上执行了
git push
,那么它会要求
--设置上游


另外,我没有设置
remote.github.push
remote.master1.push

让我们把它分成两部分

git推送
和上游 首先:
gitpush
,不带任何附加参数,will(通常取决于设置,我在这里不赘述),查看当前分支的上游设置

如果当前分支上没有上游,则会得到:

fatal: The current branch <branch> has no upstream branch.
你真的跑了:

git push github master1
(检查您的命令历史记录。)如果您提供refspec参数(这四个字的
git push
命令就是这样做的),那么refspec将提供分支名称(本地使用的分支名称)和git请求其git设置的分支名称。不需要当前分支,也不需要任何分支的任何上游设置

git分支机构
git签出-b
和上游
git分支
git签出
都可以创建新的分支名称

分支名称可以具有上游集,也可以不具有上游集

因此,当
git branch
git checkout
创建新的分支名称时,它们可以选择设置上游

它们的实际行为是可配置的,可以使用
branch.autoSetupMerge
branch.autoSetupRebase
。不过,他们的默认行为是:

  • 如果不提供起始提交,请在创建新分支时使用
    HEAD
    作为起始提交,并且不要设置上游
  • 如果确实提供了起始提交,请检查所提供参数的形式:
    • 如果它具有远程跟踪名称的形式,这意味着远程跟踪名称和该远程跟踪上显示的分支名称,则设置一个上游
    • 否则,不要设置上游
由于
git branch master1
不提供起始提交,因此新名称是使用
HEAD
解析的哈希ID创建的,它没有上游。因此,您的
git分支-vv
没有显示上游集

环境使事情变得复杂 所有不同设置(
push.default
remote..push
,以及其他设置)之间所有可能交互的确切细节可能会搞乱所有这些。我之所以提到这一点,主要是因为您提到您没有设置任何这些。如果您这样做,上述部分或全部内容可能无效。Git文档涵盖了一些但不是所有可能的组合


当它说某个组合应该以某种特定的方式运行时,它应该以这种方式运行。否则,它可能以Git程序员认为方便的任何方式运行。配置选项时要小心:有些组合可能从未经过测试。

我们将其分为两部分

git推送
和上游 首先:
gitpush
,不带任何附加参数,will(通常取决于设置,我在这里不赘述),查看当前分支的上游设置

如果当前分支上没有上游,则会得到:

fatal: The current branch <branch> has no upstream branch.
你真的跑了:

git push github master1
(检查您的命令历史记录。)如果您提供refspec参数(这四个字的
git push
命令就是这样做的),那么refspec将提供分支名称(本地使用的分支名称)和git请求其git设置的分支名称。不需要当前分支,也不需要任何分支的任何上游设置

git分支机构
git签出-b
和上游
git分支
git签出
都可以创建新的分支名称

分支名称可以具有上游集,也可以不具有上游集

因此,当
git branch
git checkout
创建新的分支名称时,它们可以选择设置上游

它们的实际行为是可配置的,可以使用
branch.autoSetupMerge
branch.autoSetupRebase
。不过,他们的默认行为是:

  • 如果不提供起始提交,请在创建新分支时使用
    HEAD
    作为起始提交,并且不要设置上游
  • 如果确实提供了起始提交,请检查所提供参数的形式:
    • 如果它具有远程跟踪名称的形式,这意味着远程跟踪名称和该远程跟踪上显示的分支名称,则设置一个上游
    • 否则,不要设置上游
由于
git branch master1
不提供起始提交,因此新名称是使用
HEAD
解析的哈希ID创建的,它没有上游。因此,您的
git分支-vv
没有显示上游集

环境使事情变得复杂 所有不同设置(
push.default
remote..push
,以及其他设置)之间所有可能交互的确切细节可能会搞乱所有这些。我之所以提到这一点,主要是因为您提到您没有设置任何这些。如果您这样做,上述部分或全部内容可能无效。Git文档涵盖了一些但不是所有可能的组合

当它说某个组合应该以某种特定的方式运行时,它应该以这种方式运行。其他