这两个命令有什么区别?
git pull
和
git pull origin master
答案 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:
行。