Git:push是用`–set-upstream origin master`执行的,不是为了清空repo


Git: push was executed with `--set-upstream origin master` to not empty repo

我是一个非常初学Git的人。我已经读到,当repo为空时,git push --set-upstream origin master只能执行一次。

然而,我第二次忘记了,并用--set-upstream origin master推了推。现在,当我这样做时,我得到

1
2
3
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

这意味着什么?我现在该怎么做?


I a very very beginner with git. I've read that git push --set-upstream origin master must be executed only once - when repo is empty.

这不太正确,有两种不同的方式。其中之一是这样的:

However, I forgot and pushed with --set-upstream origin master second time.

你可以随心所欲地多次这样做。

原始索赔中的第二个缺陷是,你不必做一次。在第一个git push上,一次这样做既方便又好,但这不是一个要求。1此外,对于每个新到的分支来说,一次这样做是一个好主意,2不仅仅是在上游存储库是空的情况下。也就是说,"第一次推"并不意味着"有史以来的第一次推",而是"每个新分支的第一次推"。

每次在git push中使用-u--set-upstream选项时,都会设置或重新设置(即不更改),甚至更改刚刚推过的分支的上游设置。将分支B推到名为origin的远程创建或更新您的origin/B远程跟踪分支3,然后将B的上游设置为origin/B。如果已经设置成那样,没问题!如果一点也不设置,现在就设置好了:耶!如果设置不同,现在设置为origin/B.,如果你想这样设置:耶!如果这不是你想要的设置(这似乎不太可能),这才是糟糕的。

要了解您为什么要设置或更改上游,请参阅相关问题的此答案。请注意,您也可以取消设置任何给定分支的上游。

要了解更多的历史,了解Git 1.7及更早版本在过去糟糕的日子里是如何工作的,请参阅这个问题和这个问题。

Dhiraj的回答解释了你现在看到的。

使用-u本身不是一项要求。但是,如果您正在推送的另一个git存储库没有相同名称的分支,并且您的push.default配置是simple,那么您对git push -u origin master的替代配置是git push origin master:master,也就是说,您必须指定两次分支名称。写一次-u比较短,把你的master设置在新创建的origin/master的上游,这是一件好事,所以用一次-u比较短更好,但不是必需的。

当你运行git pushgit fetchgit pull时,它只运行git fetch,然后第二个git命令,你的git会调用另一个git。另一个git有自己的分支。这些分支机构有自己的承诺,可能与您在分支机构的承诺不匹配。显然,一个新的、完全空的存储库没有提交(因此也没有分支),4但是如果您创建了一个名为zorg的新分支,那么他们的git可能还没有zorg的分支:这个分支对他们来说是新的。

3您的远程跟踪分支(如origin/master)是一种让您的Git记住的方法,为了您的方便,您的Git从他们的(源站的)Git获得了关于他们的分支的信息,上次您运行git fetchgit pushorigin时。这就是他们的目的。每当你认为它们可能发生了变化,你想知道的时候,就用git fetchgit remote update来更新它们。

4.哲学问题:一个分支存在而没有承诺意味着什么?有没有"空树枝"之类的东西?(Git的答案大多是否定的,没有这样的东西,但是还有其他版本控制系统,我只是说"大部分"……)


在Github,您可以选择默认签出哪个分支(即克隆时)。默认情况下,原点/头部将指向该点。

有关详细信息,请参阅此链接为什么在运行"git branch-r"时显示"origin/head"?