【发布时间】:2017-04-05 23:27:43
【问题描述】:
为什么 git pull 会拉取所有内容,包括新创建的远程分支,而 git pull origin master 却没有?
我正在使用git version 2.9.3.windows.2。
【问题讨论】:
为什么 git pull 会拉取所有内容,包括新创建的远程分支,而 git pull origin master 却没有?
我正在使用git version 2.9.3.windows.2。
【问题讨论】:
当您不指定分支时,将使用默认设置。默认意味着获取和更新远程存储库中存在的所有个分支。
详见文档:
git pull [options] [<repository> [<refspec>…]]
<refspec>指定要获取哪些 refs 以及要更新哪些本地 refs。当命令行上没有出现<refspec>s 时,将从remote.<repository>.fetch变量中读取要获取的引用(请参阅git-fetch[1])。
参考文档说明:
您经常与同一个远程存储库进行交互,方法是定期重复地从中获取。为了跟踪这样一个远程仓库的进度,git fetch 允许你配置
remote.<repository>.fetch配置变量。通常这样的变量可能如下所示:
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/*上面的示例将获取存在于
origin中的所有分支(即任何匹配值左侧的引用,refs/heads/*)并更新refs/remotes/origin/*层次结构中的相应远程跟踪分支.
该行为是默认行为,因为它允许您一次同步整个存储库。如果您不想一次更新所有本地分支,请使用git fetch 同步存储库并使用git merge origin/<branch> 更新每个本地分支。
【讨论】:
其实很简单
当您说git pull 时,无论任何钩子和过滤器如何,所有内容都会添加到您的本地。简而言之,您可以从远程获取所有内容并更新.git 文件夹。你可以去文件夹.git/logs/refs/remotes/origin/
您将看到您在本地拥有的所有分支机构。
所以,现在我从我的 cmd 输入了git pull。
幕后发生的事情与您拥有的当地分支机构无关。它连接了原点并从那里获取所有信息到您的本地。
但是,当我输入git pull origin master。在此,您提供了一个来自原点的路径规范,您需要一个最新的主分支负责人。然后只有主分支被拉出并刷新,因为它在远程
所以,origin master 是他们用 git 语言为路径调用的路径规范。
【讨论】:
在外行语言中,git pull 从您的远程获取所有内容(所有新分支和更新旧分支),默认情况下,它会为 origin 这样做。如果您有任何其他遥控器,例如upstream,您必须指定类似git pull upstream,它会从上游更新所有内容。
【讨论】: