git fetch的语法是什么意思

时间:2015-01-31 07:29:42

标签: git

假设我做git fetch origin并得到以下输出:

From origin
 * [new branch]      develop    -> origin/develop
 * [new branch]      new        -> origin/new

这种语法是什么意思? 有时它输出不同的东西,如果我git fetch origin develop我得到以下输出:

From origin
 * branch            develop    -> FETCH_HEAD
   f3beeb4..2b38122  develop    -> origin/develop

所以这里的语法不同。为什么?我很欣赏这些语法的简短描述。

修改

对不起家伙因为我的问题不太清楚。我对这些部分的语法/逻辑感兴趣:

 * [new branch]      develop    -> origin/develop
 * [new branch]      new        -> origin/new

 * branch            develop    -> FETCH_HEAD
   f3beeb4..2b38122  develop    -> origin/develop

而不是这个git fetch origin

4 个答案:

答案 0 :(得分:2)

git fetch将连接到远程存储库。它(默认情况下)将在本地存储库中创建“远程分支”,这些只是名为remotename/branchname的普通引用。

如果在远程存储库上检测到新分支,git fetch将创建一个新的“远程分支”:

 * [new branch]      new        -> origin/new

在遥控器(遥控器的原点)上有一个名为“new”的新分支。因此git在此存储库中创建“origin / new”。

如果本地“远程分支”与远程存储库上的分支不同,git将更新它:

   f3beeb4..2b38122  develop    -> origin/develop

这里“origin / develop”指向提交f3beeb4,但有人推到了远程目录,因此它现在指向2b38122。因此git会将“远程分支”从f3beeb4更新为2b38122。

如果指定显式分支名称,git会将其存储在名为“FETCH_HEAD”的特殊引用中。这将打印如下:

 * branch            develop    -> FETCH_HEAD

答案 1 :(得分:1)

git fetch更新远程跟踪分支(在本例中为newdevelop)。

git fetch origin developdevelop中存储了.git/FETCH_HEAD分支的值。


<强>更新

找到一个stackoverflow帖子,其中描述了相同的(here)。

答案 2 :(得分:1)

git-fetch的文档使其有些明确。

  • git fetch origin确实是git fetch <repository>。您告诉Git从哪里获取更新,并且它不一定必须是以前添加的遥控器 - 如果您愿意,它可以是一个URL。

    在您的项目中,您可以拥有所需数量的遥控器;但通常情况下,只需要一个遥控器,按惯例,它是origin

    在文档中,如果省略,origin是默认值,除非您配置了上游分支:

      

    如果未指定远程,则默认情况下将使用origin远程,除非为当前分支配置了上游分支。

    如果你只有一个遥控器,那么这几乎没有意义;如果您想从不同的遥控器中专门获取,这是您实际使用此表单的时候。

  • git fetch origin develop<refspec>参数添加到上面的命令中。它基本上告诉Git哪个引用,以及哪个本地引用更新。它会将此获取的结果直接存储在short-lived ref called FETCH_HEAD而不是分支中。

答案 3 :(得分:1)

git fetch origin基本上更新了远程跟踪分支,这意味着所有远程存储库分支都将复制到本地存储库。常规命令为git fetch <remote>,其中remote在此情况下为origin。然后输出显示已下载的分支:

  • develop,它是一个并指向(远程)origin/develop(因此->)并且是new branch
  • new指向(再次远程)origin/new并且也是new branch

git fetch origin develop或一般git fetch <remote> <branch>与上述相同,但仅提取指定的<branch>,在您的情况下为develop

参考文献: