小编典典

为什么我需要显式推送一个新分支?

all

我是新来的git,我正在练习。我创建了一个本地分支,但我看到当我这样做时,git push我的分支没有上传到存储库。我不得不实际做:git push -u origin --all
为什么是这样?默认情况下,分支不是要推送的新更改吗?为什么我需要运行第二个命令?


阅读 70

收藏
2022-07-12

共1个答案

小编典典

实际原因是,在一个新的仓库(git init)中, 没有分支 (没有master,根本没有分支,零分支)

因此,当您第一次推送到一个 _空的_上游仓库(通常是一个裸仓库)时,该上游仓库没有同名的分支。

和:

  • 默认推送策略是’matching推送所有同名分支,如果它们不存在则创建它们),
  • 默认推送策略现在是“ simple” (仅推送当前分支,并且仅当它在上游具有类似名称的远程跟踪分支时,从 git 1.7.11 开始

在这两种情况下,由于上游空仓库没有分支:

  • 还没有匹配的命名分支
  • 根本没有上游分支(有或没有同名!跟踪与否)

这意味着您本地的 第一次 推送不知道:

  • 在哪里推
  • 推送什么(因为它找不到任何被记录为远程跟踪分支和/或具有相同名称的上游分支)

所以你至少需要做一个:

git push origin master

但如果你只这样做,你:

  • 将在上游创建一个上游master分支(现在是非空仓库):好。
  • 不会 记录 本地分支’ master‘需要推送到上游(origin)’ master‘(上游分支):不好。

这就是为什么建议在第一次推送时执行以下操作:

git push -u origin master

这将记录origin/master为远程跟踪分支,并将启用下一次推送自动推master送到origin/master

git checkout master
git push

这也适用于推送策略 ‘ current‘ 或 ‘ upstream‘。
在每种情况下,在初始之后git push -u origin master,一个简单的 git push 就足以继续将 master
推送到正确的上游分支。

2022-07-12