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文档涵盖了一些但不是所有可能的组合
当它说某个组合应该以某种特定的方式运行时,它应该以这种方式运行。其他