【问题标题】:Git pull - default remote and branch using -u option - works with push but not pullGit pull - 使用 -u 选项的默认远程和分支 - 适用于 push 但不适用于 pull
【发布时间】:2016-03-15 06:06:34
【问题描述】:

我使用的是 Git 版本 2.6.3,刚运行时收到此消息

git pull

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

我的印象是 git 在“简单”配置下默认为 origin 和同名分支。

经过一番麻烦,我发现最简单的配置方法是使用 -u 选项,如下所示:

$ git push -u origin master

然后它会说:

“分支主机设置为从源跟踪远程分支主机。”

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

$ git pull -u origin master

-u 选项在 pull 时无法识别,只能在 push 时识别

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

【问题讨论】:

  • 谢谢,这个问题基本上是一样的,但我希望得到比那里给出的更好的答案
  • @starlocke 我更新了我的问题。最好使用 -u 选项,但 -u 选项仅适用于 git push 而不是 git pull,我想知道为什么。此外,将 Git 升级到 > 2.0 版可能很重要

标签: git github


【解决方案1】:

-u 选项在拉取时无法识别,只能在推入时识别

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

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

官方原因:

git fetch”学会了“--set-upstream”选项来帮助那些先 从他们打算推送到的私人分叉中克隆,添加真正的 上游通过“git remote add”,然后是“git fetch”。

你可以关注the discussions here

参见Corentin BOMPARD (``)commit 24bc1a1(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)。

一个典型的用例是:

git clone http://example.com/my-public-fork

git远程添加主http://example.com/project-main-repo git pull --set-upstream main master

或者,而不是最后一行:

git fetch --set-upstream main master

git merge # 或 git rebase

这主要相当于克隆 project-main-repo(它设置 upsteam)然后“git remote add”my-public-fork,但对于使用允许从 Web UI 分叉的托管系统的人来说可能感觉更自然.

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


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

Ralf Thielow (ralfth)commit 391c7e4(2019 年 10 月 31 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 7ab2088,2019 年 12 月 1 日)

fetch.c: 修正警告信息中的错字

签字人:Ralf Thielow
审核人:Jonathan Nieder

所以不是:

multiple branch detected, incompatible with --set-upstream

但是:

multiple branches detected, incompatible with --set-upstream

注意:使用 Git 2.27(2020 年第二季度),文档已更新。

参见 René Scharfe (rscharfe)commit 9c68873(2020 年 3 月 9 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit ab8ef92,2020 年 3 月 25 日)

pull: 记录更多的 passthru 选项

签字人:René Scharfe

git pull 接受选项 --dry-run-p/--prune--refmap-t/--tags,因为 a32975f516 ("pull: 将 git-fetch 的选项传递给 @ 987654339@", 2015-06-18, Git v2.6.0-rc0 -- merge 列在batch #0), -j/--jobs62104ba14a (子模块: 允许并行获取, 添加测试和文档, 2015-12-15, Git v2.8.0-rc0) 和 --set-upstream24bc1a1292 (pull, fetch: git add --set-upstream option, 2019-08-19, Git v2.24.0-rc0)。更新其文档以匹配。


注意:使用 Git 2.29(2020 年第四季度),--set-upstream 选项更加清晰:

参见Philippe Blain (phil-blain)commit 847b372(2020 年 8 月 12 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit ee356a8,2020 年 8 月 19 日)

fetch, pull doc:正确描述'--set-upstream'

签字人:Philippe Blain

git fetch的'--set-upstream'选项(man)git pull也接受(man)并通过到底层的git fetch(man)) 允许为当前分支设置上游配置。

这是在 24bc1a1292 中添加的(pullfetch:添加 --set-upstream 选项,2019-08-19,Git v2.24.0-rc0)。

但是,该选项的文档将其操作描述为“如果成功获取远程,则拉取并添加上游(跟踪)引用 [...]”,这是错误的,因为此选项不会导致 git fetch也没有git pull拉:

修正该选项的描述。
如果远程获取成功,添加上游

documentation 现在包括:

如果远程获取成功,添加上游(跟踪)引用,由无参数git pull 和其他命令使用。

它消除了拉取然后添加上游的概念。

【讨论】:

  • 谢天谢地,没有这个功能是愚蠢的(我猜)
【解决方案2】:

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

这样你在拉和推时默认将上游分支设置为master,而无需实际使用pushpull命令。

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

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

【讨论】:

    【解决方案3】:

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

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

    如果您想了解更多信息,请点击此处:An Asymmetry Between Git Pull and Git Push

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 2013-12-11
      • 2012-11-28
      • 2019-09-30
      • 2012-01-16
      • 2013-10-14
      • 2018-11-06
      • 2012-07-18
      • 2016-02-05
      相关资源
      最近更新 更多