git fetch 的语法是什么意思

what does the syntax of git fetch mean

假设我执行 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

所以这里的语法是不同的。为什么?如果能对这些语法中的每一个进行简短描述,我将不胜感激。

编辑:

抱歉大家没有更清楚地回答我的问题。我实际上对 syntax/logic 这些作品感兴趣:

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

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

而不是这个 git fetch origin

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

git fetch origin developdevelop 分支的提取值存储在 .git/FETCH_HEAD 中。


更新:

找到了一个 Whosebug post,其中描述很好 (here)。

git-fetch 的文档说得比较清楚。

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

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

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

    When no remote is specified, by default the origin remote will be used, unless there’s an upstream branch configured for the current branch.

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

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

git fetch origin 基本上更新您的远程跟踪分支,这意味着所有远程存储库分支都被复制到您的本地存储库。一般命令是 git fetch <remote>,在这种情况下 remoteorigin。然后输出显示已下载的分支:

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

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

参考文献:

git fetch 将连接到远程存储库。它将(默认情况下)在本地存储库中创建 "remote branches",它们不过是普通的引用,如 remotename/branchname.

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

 * [new branch]      new        -> origin/new

在远程端(称为 origin 的远程)有一个名为 "new" 的新分支。 git 因此在此存储库中创建 "origin/new"。

如果本地 "remote branch" 与远程仓库上的分支不同,git 将更新它:

   f3beeb4..2b38122  develop    -> origin/develop

这里 "origin/develop" 指向提交 f3beeb4 但有人推送到远程仓库,因此它现在指向 2b38122。因此 git 会将 "remote branch" 从 f3beeb4 更新为 2b38122。

如果您指定一个明确的分支名称,git 会将其存储在一个名为 "FETCH_HEAD" 的特殊引用中。这将像这样打印:

 * branch            develop    -> FETCH_HEAD