这些命令之间有什么区别?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
这些命令之间有什么区别?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
site:stackoverflow.com git Difference "git pull" "git pull origin master"。
Answers:
git pull是一个便捷命令,它可以同时执行不同的操作。基本上,这只是的组合git fetch,它连接到远程存储库并获取新的提交,和git merge(或git rebase)将新的提交合并到本地分支中。由于涉及到两个不同的命令,因此含义git pull并不总是很明显。
您可以为本地分支配置上游。全新克隆后,您将拥有一个本地分支“ master”,一个远程“ origin”,而您的master分支具有“ origin / master”作为上游。我在下面假设此设置。(您可以使用git branch -vv或通过查看.git / config来查看上游配置。)
现在为您的问题:
git pull= git fetch origin+ git merge origin/master(或任何上游)git pull origin= git pull(只要来源是您的上游遥控器)git pull origin master= git fetch origin master+git merge FETCH_HEADgit pull origin/master :无效,除非您有一个名为“ origin / master”的遥控器git pull origin HEAD:master:尝试将您的本地主设备直接重置为HEAD指向的原点。(不要这样做。)git pull origin HEAD:master一个坏主意?
git pull拉该分支机构或主服务器
git pull origin HEAD:master实质上(直到字面上的脚本在Git 2.6中用C重写为止)都将HEAD:master部分传递给git fetch,因此git fetch该步骤可以完成;然后使用git fetch步骤获得的提交哈希值合并或重新设置基数。Refspec是source:dest,因此HEAD提供给其他Git进行翻译。因此,这取决于另一个Git,但通常另一个Git是HEAD它的名称master。如果您不是一个人master,则merge-or-base将使用您的fetch-updated master(dest)(除非fetch失败)。
git pull origin br1 br2。看起来和感觉应该如此git checkout br1; git pull origin; git checkout br2; git pull origin,但事实并非如此!实际上,它确实做了:git fetch origin && git merge origin/br1 origin/br2,它将两个获取结果合并到您当前的分支中,Git称之为章鱼merge。这绝不是任何人想要的。也许git pull应该拒绝完全的命令(人谁真的不希望它可以运行取第一,然后合并)。
Apull基本上是a fetch(它将一些提交和关联的对象从远程存储库导入到您的提交中),然后是一个将这些提交和相关对象“应用于”您的工作副本的操作。默认情况下,第二阶段使用a完成,merge但您可以将pull.rebase变量设置为true,然后将其变基。
该pull命令弹出两个问题。首先是,究竟获取了什么?第二个是,如何将这些更改应用于我的工作副本?让我们从第一个开始。该命令的完整格式为
git pull [options] [repository] [<refspec>...]
该options是标志是控制行为(例如--rebase使pull工作作为fetch+rebase即使pull.rebase是false)。
repository 是要从中获取的远程的名称(或URL)。
refspecs 是一种简洁的方法,用于指定要获取的远程引用以及要将其放在当前工作副本中的位置。
首先让我们采用最明确的形式。
git pull origin branch1:branch2
这基本上就是说,branch1在远程调用上提取引用中的更改origin,然后将其合并(或变基)到本地分支中branch2。例如,如果我说git pull origin master:dev,我将得到一个名为的本地分支dev,该分支将指向与相同的提交master。有关如何指定refspec的详细信息,请参见此处。您可以使用*来表示多个refspec。例如,git pull origin refs/heads/*:refs/heads/*将所有分支(存储在之下heads)放入本地存储库,并将它们合并到具有相同名称的本地分支中。
现在,让我们一个个地删除参数,以讨论默认的工作方式。首先,我们可以从refspec中删除目标,然后简单地说git pull origin branch1。这将首先fetch将远程分支branch1放入您的本地存储库。它将作为称为的临时参考提供FETCH_HEAD。之后,它将运行git merge FETCH_HEAD,它将合并此分支到您当前的活动分支(即HEAD)。当您在本地分支机构中并且想要将更改从远程获取到该分支机构时,通常可以这样做。
现在,让我们branch1完全删除,然后说git pull origin。现在,git知道要从(origin)那里获取,但是不知道要获取什么。它对此有一些默认设置。最常见的情况是您的配置文件中有一个branch.<name>.merge选项(这是merge在一节中称为的条目[branch "master"])。如果是这样,它将使用那里的refspecs进行操作。
如果我们origin完全放弃并简单地说git pull,它将检查配置以查看是否有一个branch.<name>.remote指定从哪个远程拉出。以上内容告诉您要拉什么。
您的第4点和第5点不是正常的用例。如果您有一个origin/master不太可能的远程呼叫,则第一个有意义。origin/master是通常用于跟踪本地参考master遥控器上的分支origin。第二个将尝试获取HEAD远程(通常是默认分支master)上的更改,然后将其合并到本地master。尽管这可能是您希望定期执行的操作,但是该命令非常不常规,并不是我经常看到的命令。
我略过了一些细节,但这些细节足以确保您的日常工作安全舒适。有关所有详细信息,您可以查看的手册页git pull。
master从远程获得分支,但可以在dev本地调用。
git pull origin refs/heads/*:refs/heads/*没有为我工作,我得到了no matches found: refs/heads/*:refs/heads/*。我也尝试过git pull origin refs/remotes/origin/*:refs/heads/*,但是那也不起作用。我认为不可能在一个命令中将所有分支拉到远程,并且随后将所有这些分支合并/重新部署到其随后的本地分支中也不可能。
git pull没有配置上游的含义是什么?(手册页仅指出默认值为已配置的上游。)