【问题标题】:what does the syntax of git fetch meangit fetch 的语法是什么意思
【发布时间】:2015-03-30 17:19:51
【问题描述】:

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

【问题讨论】:

    标签: git


    【解决方案1】:

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

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

     * [new branch]      new        -> origin/new
    

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

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

       f3beeb4..2b38122  develop    -> origin/develop
    

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

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

     * branch            develop    -> FETCH_HEAD
    

    【讨论】:

    • 谢谢,您能否详细说明为什么 git 有时会显示此分支更新 f3beeb4..2b38122 develop -> origin/develop 有时会显示 * branch develop -> FETCH_HEAD fetch_head 更新?后一种语法中的* branch 是什么意思?
    • 每当远程存储库中有新提交时,您应该会收到第一条消息。 (在这种情况下,git 需要更新本地 ref。)每当您指定像 git fetch origin develop 中的显式分支时,您都应该收到第二条消息。 (在此明确指定的分支将存储在 FETCH_HEAD 中。)输出的第一列显示了它所讨论的 ref(分支/标签/等)类型。第二列是远程引用名称,第三列是本地引用名称。
    【解决方案2】:

    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

    参考文献:

    【讨论】:

      【解决方案3】:

      git-fetch 的文档说明了这一点。

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

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

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

        当没有指定远程时,默认使用origin 远程,除非为当前分支配置了上游分支。

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

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

      【讨论】:

        【解决方案4】:

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

        git fetch origin develop 将获取的develop 分支的值存储在.git/FETCH_HEAD 中。


        更新:

        找到了一个 stackoverflow 帖子,其中有很好的描述 (here)。

        【讨论】:

          猜你喜欢
          • 2016-07-12
          • 2011-12-09
          • 1970-01-01
          • 2013-11-02
          • 1970-01-01
          • 2018-05-12
          • 2014-04-21
          • 2021-03-01
          • 1970-01-01
          相关资源
          最近更新 更多