为什么使用git pull
命令会拉取包括新建的远程分支在内的所有内容,但是使用git pull origin master
命令却不会呢?
我正在使用git version 2.9.3.windows.2
版本。
当您未指定任何分支时,将使用默认设置。默认情况下会获取并更新远程仓库中所有分支。
有关详细信息,请参阅文档:
当您未指定任何分支时,将使用默认设置。默认意味着获取并更新所有存在于远程仓库中的分支。
git pull [options] [<repository> [<refspec>…]]
<refspec>
指定要获取的引用和要更新的本地引用。如果命令行上没有出现<refspec>
,则从remote.<repository>.fetch
变量中读取要获取的引用(请参见git-fetch[1])。来源:https://git-scm.com/docs/git-pull
文档指出:
通常情况下,你会通过定期、反复地从同一远程存储库中获取内容来与其交互。为了跟踪这样一个远程存储库的进度,git fetch 允许你配置
remote.<repository>.fetch
配置变量。这种变量通常看起来像这样:
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/*
上面的例子将获取在
origin
中存在的所有分支(即与值的左侧匹配的任何 ref,refs/heads/*
)并更新refs/remotes/origin/*
层次结构中相应的远程跟踪分支。
git pull
从你的远程仓库获取所有内容(包括新分支和更新旧分支),默认情况下,它会为origin
执行此操作。如果你有其他的远程仓库,比如upstream
,你需要指定它,例如git pull upstream
,这将从upstream更新所有内容。这非常简单。
当你执行git pull
命令时,无论有没有钩子和过滤器,所有内容都会被添加到本地。简而言之,你会从远程获取所有内容,并更新.git
文件夹。你可以进入.git/logs/refs/remotes/origin/
文件夹,查看本地所有分支。
所以,现在我从命令行输入git pull
。
幕后发生的事情与你拥有的本地分支无关。它连接到源头,将源头中的所有内容获取到本地。
但是,当我键入git pull origin master
时。在这种情况下,你需要一个最新的主分支。然后只有主分支被拉取并刷新为与远程相同。
因此,在Git语言中,origin master
是一种路径规范。