“git fetch <url>”和“git add remote upstream <url>”后跟“git fetch upstream”有什么区别?

时间:2015-05-10 00:19:16

标签: git git-fetch

我试图将更改从上游转移到我的分支。我试过git fetch https://github.com/someuser/someproject,但它固执地拒绝做任何事情。它只是说了一些完全神秘而没有做的事情,即:

From https://github.com/someuser/someproject
 * branch            HEAD       -> FETCH_HEAD

但是当我将URL添加为命名远程时,事情发生了变化:

> git remote add upstream https://github.com/someuser/someproject.git
> git fetch upstream
remote: Counting objects: 340, done.
remote: Compressing objects: 100% (268/268), done.
remote: Total 340 (delta 145), reused 18 (delta 16), pack-reused 44
... etc ...

那有什么区别?为什么在没有先添加遥控器的情况下指定遥控器时什么都不做?当我尝试从URL中获取时它究竟告诉我什么?

2 个答案:

答案 0 :(得分:1)

我不是这方面的专家,因此我使用Google和the man pages来帮助拼凑正在发生的事情。

This question应揭开事物cb方面的神秘面纱。我真的不可能通过阅读你的问题告诉你的回购状态是什么,但可能是你的FETCH_HEAD指向远程仓库中FETCH_HEAD的最新提交,无论发生什么是。您可能已经在系统上进行了这些提交,因此所有git都更新了HEAD。你可能想要提供一个分支。

添加遥控器时,您将获得其他功能,例如默认分支和远程跟踪分支。我认为你的第二个命令行为不同,因为FETCH_HEAD正在使用一些隐含的逻辑来做你通常想要的事情。直接从URL中获取更多是一项高级操作,因此您可以获得更少的假设。

故事的道德,如果你想要工作的东西,添加一个遥控器。否则,准备好应对更多潜在的细节。

答案 1 :(得分:1)

使用网址获取时,还必须指定要获取的<refspec>,即分支或标记,否则它将仅获取远程URL的默认HEAD为{ {1}},这可能不是您想要的。

语法是可选的FETCH_HEAD,后跟+。如果省略<src>:<dst>,将使用<dst>

例如:

FETCH_HEAD

这将在本地创建git fetch https://github.com/someuser/someproject refs/heads/master:upstream/master 远程分支。

More advanced options are available.