【问题标题】:Default behaviour of 'git pull''git pull' 的默认行为
【发布时间】:2017-04-05 23:27:43
【问题描述】:

为什么 git pull 会拉取所有内容,包括新创建的远程分支,而 git pull origin master 却没有?

我正在使用git version 2.9.3.windows.2

【问题讨论】:

    标签: git git-pull


    【解决方案1】:

    当您不指定分支时,将使用默认设置。默认意味着获取和更新远程存储库中存在的所有个分支。

    详见文档:

    git pull [options] [<repository> [<refspec>…​]]
    

    &lt;refspec&gt; 指定要获取哪些 refs 以及要更新哪些本地 refs。当命令行上没有出现&lt;refspec&gt;s 时,将从remote.&lt;repository&gt;.fetch 变量中读取要获取的引用(请参阅git-fetch[1])。

    来源:https://git-scm.com/docs/git-pull

    参考文档说明:

    您经常与同一个远程存储库进行交互,方法是定期重复地从中获取。为了跟踪这样一个远程仓库的进度,git fetch 允许你配置remote.&lt;repository&gt;.fetch 配置变量。

    通常这样的变量可能如下所示:

    [remote "origin"]
      fetch = +refs/heads/*:refs/remotes/origin/*
    

    上面的示例将获取存在于origin 中的所有分支(即任何匹配值左侧的引用,refs/heads/*)并更新refs/remotes/origin/* 层次结构中的相应远程跟踪分支.

    来源:https://git-scm.com/docs/git-fetch#CRTB

    该行为是默认行为,因为它允许您一次同步整个存储库。如果您不想一次更新所有本地分支,请使用git fetch 同步存储库并使用git merge origin/&lt;branch&gt; 更新每个本地分支。

    【讨论】:

      【解决方案2】:

      其实很简单

      当您说git pull 时,无论任何钩子和过滤器如何,所有内容都会添加到您的本地。简而言之,您可以从远程获取所有内容并更新.git 文件夹。你可以去文件夹.git/logs/refs/remotes/origin/ 您将看到您在本地拥有的所有分支机构。

      所以,现在我从我的 cmd 输入了git pull

      幕后发生的事情与您拥有的当地分支机构无关。它连接了原点并从那里获取所有信息到您的本地。

      但是,当我输入git pull origin master。在此,您提供了一个来自原点的路径规范,您需要一个最新的主分支负责人。然后只有主分支被拉出并刷新,因为它在远程

      所以,origin master 是他们用 git 语言为路径调用的路径规范。

      【讨论】:

        【解决方案3】:

        在外行语言中git pull 从您的远程获取所有内容(所有新分支和更新旧分支),默认情况下,它会为 origin 这样做。如果您有任何其他遥控器,例如upstream,您必须指定类似git pull upstream,它会从上游更新所有内容。

        【讨论】:

          猜你喜欢
          • 2020-11-10
          • 2012-07-21
          • 2011-02-24
          • 2020-03-30
          • 1970-01-01
          • 2022-10-21
          • 2018-08-20
          • 2012-07-11
          • 2020-03-25
          相关资源
          最近更新 更多