关于git pull和git fetch的一些混淆
那么,有人能澄清一下这一点吗: 我运行:关于git pull和git fetch的一些混淆,git,git-pull,git-fetch,Git,Git Pull,Git Fetch,那么,有人能澄清一下这一点吗: 我运行: git pull origin master git status 然后它将这些变化拉出来并说: your branch is ahead of origin/master ... blahblah by 6 commits... 当我跑的时候 git fetch git status 它说: # On branch master nothing to commit (working directory clean) 所以-我想,git pu
git pull origin master
git status
然后它将这些变化拉出来并说:
your branch is ahead of origin/master ... blahblah by 6 commits...
当我跑的时候
git fetch
git status
它说:
# On branch master
nothing to commit (working directory clean)
所以-我想,git pull
git默认获取吗-那么为什么它说“提前6次提交”,而没有额外的git fetch
?git status
中的“提前或延迟X次提交”文本基于当前分支的跟踪分支的状态<例如,如果您在master
上,则使用code>remotes/origin/master
当您在同时指定远程和分支的情况下运行git pull
时,它会获取新提交并将其合并到当前分支,但不会更新origin的远程跟踪分支。相反,它将刚刚获取的提交指向FETCH\u HEAD
另一方面,在没有指定参数的情况下运行git fetch
,会更新所有远程跟踪分支,因此会使消息消失<没有参数的code>git pull也会这样做
一个我自己打了很多次的小把戏!我希望git在每次抓取时更新针对特定远程对象的所有远程跟踪分支。在这种情况下,它的意思是:您的分支在前面,即包含未推送的提交,与拉取无关,这对你来说只是一个警告。@bredikhin,但我刚刚撤销了这些承诺——为什么它们会被归类为未推动的?这就是我困惑的地方。为什么当我从远程分支提取更改时,我不会立即收到一条消息“无需提交(工作目录清理)”?是否可能在您第二次运行
git status
之前,您运行了git push
?@Dannyboy您的本地提交未被推送,不是你拉的。@bredikhin,但我没有任何本地提交。如果我做了git-fetch
-在git-pull
->这个消息没有出现之后,我只是出于好奇才得到“无需提交(工作目录清理)”的消息,你知道为什么git-pull
不更新远程/分支
ref吗?这只是歇斯底里的葡萄干,还是有什么好的理由?结果证明它实际上根本不是git pull;这真的是一种“git pull”。“refspec”基本上是由冒号分隔的源-目标对,如master:origin/master
git pull origin master:origin/master
表示“转到origin remote,给我它的主分支,并在本地存储库中更新origin/master”。如果不使用冒号,提取将根本不会更新任何本地引用,只需fetch\u HEAD
。进一步阅读: