git pull和git pull origin master之间的区别

时间:2014-05-30 11:07:16

标签: git github

这两个命令有什么区别?

git pull

git pull origin master

3 个答案:

答案 0 :(得分:28)

[编辑,2018年5月:git pull不再是shell脚本,现代Git中的一些细节不同。 Pull现在还有递归选项,使其对子模块更有用。这个答案忽略了子模块。]

git pull脚本是一种方便的方法,用于调用git fetch后跟git merge(或git pull --rebase,调用git fetch后跟{{ 1}})。

git rebase的第一个额外参数告诉它给git pull操作提供哪个远程:

fetch
例如,

意味着从git pull origin 获取。如果你不这样做,Git会使用当前的分支origin

remote

$ git branch * master $ git config --get branch.master.remote origin 的第二个(和任何其他)参数告诉它要合并哪个或哪些分支。这些是在远程上找到的分支的名称。例如,假设您创建了一个跟踪git pull的新分支feature2

origin/feature

如果您现在想要从$ git checkout -b feature2 origin/feature 获取以获取添加到其origin分支的新提交,但将它们合并到您的本地feature分支:

feature2

如果省略分支名称,git将使用当前分支$ git pull origin feature

merge

请注意,如果列出多个分支名称,Git将执行"章鱼合并"。根据我的经验,这通常会让人第一次感到惊讶:他们认为$ git config --get branch.feature2.merge feature 会在每个分支上运行git pull remote br1 br2后跟一系列单独的git fetch - s,但这不是会发生什么。

答案 1 :(得分:11)

git pull origin master将从原始远程主分支中提取更改,并将它们合并到本地签出分支。

其中git pull将从默认远程(原点)获取所有被跟踪分支的新提交。您还可以在gitconfig文件中配置默认​​远程和分支名称。

git branch --set-upstream master origin/master

这会将以下信息添加到您的gitconfig文件中:

[branch "master"]
    remote = origin
    merge = refs/heads/master

现在只要你说git pull它将从原始主文件中获取。

答案 2 :(得分:4)

git pull origin master是详细形式,它指定远程(origin)和从(master)拉出的分支。如果您没有指定,Git将应用解释为in the documentation的默认行为:

  

人们经常使用git pull而不提供任何参数。传统上,这相当于说git pull origin。但是,当在分支branch.<name>.remote上存在配置<name>时,将使用该值而不是原点。

     

[...]

     

为了确定在命令行上运行命令时没有任何refspec参数的远程分支(以及可选地存储在远程跟踪分支中),请参阅配置变量remote.<origin>.fetch的值,如果没有,则查询$GIT_DIR/remotes/<origin>文件并使用其Pull:行。