Git pull - 使用-u选项的默认远程和分支 - 使用push而不是pull

时间:2015-12-09 19:51:10

标签: git github

我使用的是Git版本2.6.3,并在运行

时收到此消息
git pull
  

“当前分支没有跟踪信息。”

我的印象是git默认为origin,而“simple”配置下的名称相同的分支。

遇到一些麻烦后,我发现最简单的配置方法是使用-u选项,如下所示:

$ git push -u origin master

然后会说:

  

“分支主数据设置为从原点跟踪远程分支主数据。”

所以我的问题是,为什么我们不能在git pull中使用-u选项?

$ git pull -u origin master

仅在使用push

时无法识别-u选项

我的问题是 - 有充分的理由吗?

3 个答案:

答案 0 :(得分:3)

您可以使用此命令设置当前分支的上游 $ git branch --set-upstream-to=origin/master

这样一来,在没有实际使用pushpull命令的情况下拉动和推动时,默认情况下将上游分支设置为主分支。

现在尝试git pull,它应该从您的存储库开始收集所有内容,之后它会说它是Already up-to-date

如果您有任何其他问题,我将很乐意为您提供帮助。

答案 1 :(得分:2)

-u只是使用--set-upstream的快捷方式。此标志将使您的本地分支从远程上游跟踪远程分支。您只需要执行此操作一次,最好在开始时使用git push -u origin <branch_name>

这意味着当您使用git pullgit fetchgit push时,它应该假设您的本地分支和正在跟踪的远程分支将同步。

如果您想了解更多信息,请访问:An Asymmetry Between Git Pull and Git Push

答案 2 :(得分:0)

  

-u选项在拉动时无法识别,仅在推入时

     

我的问题是-是否有充分的理由?

好吧...实际上,Git 2.24(2019年第四季度,四年后)将为-u / git pull提供git fetch

官方原因:

  

git fetch”了解了“ --set-upstream”选项以帮助那些   从他们打算推送到的私有分叉中克隆,并添加true   通过“ git remote add”上游,然后从“ git fetch”上游。

您可以按照the discussions here进行操作。

请参见commit 24bc1a1Corentin BOMPARD (``)(2019年8月19日)。
(由Junio C Hamano -- gitster --commit 9437394中合并,2019年9月9日)

  

pullfetch:添加--set-upstream选项

     

--set-upstream / git pull中添加fetch选项,使用户可以为当前分支设置上游配置(branch.<current-branch-name>.mergebranch.<current-branch-name>.remote)。 / p>      

一个典型的用例是:

git clone http://example.com/my-public-fork
git remote add main http://example.com/project-main-repo
git pull --set-upstream main master
     

或者,而不是最后一行:

git fetch --set-upstream main master
git merge # or git rebase
     

这大部分等效于克隆project-main-repo(设置upsteam),然后“ git remote add” my-public-fork,但是对于使用允许从Web UI进行分叉的托管系统的人们来说,这可能会更自然

     

此功能类似于“ git push --set-upstream”。


注意:最后一个功能引入了一种类型,该类型已由Git 2.25(2020年第一季度)修复。

请参见commit 391c7e4Ralf Thielow (ralfth)(2019年10月31日)。
(由Junio C Hamano -- gitster --commit 7ab2088中合并,2019年12月1日)

  

fetch.c:修复警告消息中的错字

     

签名人:拉尔夫·蒂洛
  评论人:乔纳森·尼德

所以不是:

multiple branch detected, incompatible with --set-upstream

但是:

multiple branches detected, incompatible with --set-upstream