'git pull'的默认行为

时间:2016-11-22 10:23:38

标签: git git-pull

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

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

3 个答案:

答案 0 :(得分:4)

如果未指定分支,则使用默认设置。默认方法是获取和更新远程存储库中存在的所有分支。

有关详细信息,请参阅文档:

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/*层次结构。

     

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

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

答案 1 :(得分:1)

它非常简单

当你说git pull时,无论挂钩和过滤器都被添加到你的本地,一切都是如此。简而言之,您从遥控器获取所有内容并更新.git文件夹。你可以去文件夹.git/logs/refs/remotes/origin/ 你会在你当地看到你所拥有的所有分支。

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

幕后发生的事情与您所拥有的当地分支机构无关。它连接起源并从那里到达当地。

但是,当我输入git pull origin master时。在这里你从原点给出一个路径规范,你需要一个最新的主分支头。然后只有master brach被拉出并刷新,因为它在远程

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

答案 2 :(得分:1)

在Layman语言中git pull从您的遥控器中提取所有内容(所有新分支并更新旧分支),默认情况下,它将对origin执行此操作。如果您有其他类似upstream的遥控器,则必须指定类似git pull upstream的遥控器,它将从上游更新所有内容。