2013-12-12 54 views
8

所以 - 有人可以澄清这一个:上的git拉VS有些混乱混帐取

我运行:

git pull origin master 
git status 

然后它拉的变化,并说:

your branch is ahead of origin/master ... blahblah by 6 commits... 

当我然后运行

git fetch 
git status 

它sa伊苏:

# On branch master 
nothing to commit (working directory clean) 

所以 - 我想git pull不混帐的默认提取 - 所以为什么它说:“未来的6个提交”,无需额外git fetch

+0

在这个特殊情况下,它意味着它说的是:你的分支在前面,即包含未被提交的提交,这与提取没有关系,它仅仅是提醒你。 – bredikhin

+0

@bredikhin但我刚刚拉这些提交 - 为什么在这个世界上,他们被归类为未推?这就是我困惑的地方。为什么当我从远程分支提取更改时,我不会立即收到消息“没有提交(工作目录干净)”? – Dannyboy

+0

是否有可能在你第二次运行'git status'之前,你运行了'git push'? – micromoses

回答

2

git status中的“前面或后面的X提交”文本基于当前分支的跟踪分支的状态;例如,如果您使用的是master,则为remotes/origin/master

当您运行git pull同时具有远程和规定,它获取新的提交和将它们合并到当前分支的一个分支,但它确实更新原点的远程跟踪分支。相反,它指向FETCH_HEAD的提取提交。

运行git fetch没有指定参数,另一方面,确实更新了所有的远程跟踪分支,因此它使消息消失。没有参数的git pull也一样。

一个微妙的窍门,我打了很多次自己!相反,我希望git更新所有远程追踪分支,而不是针对特定的远程设备。

+0

出于好奇,你知道*为什么* git pull '不会更新*'remote/branch' * ref?它只是歇斯底里的葡萄干,还是有一些很好的理由? – torek

+0

事实证明,它实际上不是'git pull ';它真的是'git pull '。 “refspec”基本上是一个由冒号分隔的源 - 目标对,如'master:origin/master'; 'git pull origin master:origin/master'意思是“去远程原点,给我它的主分支,并更新本地仓库中的origin/master”。如果你离开冒号,取指不会更新任何本地参考,只是'FETCH_HEAD'。 –

+0

更多阅读:http://git-scm.com/book/en/Git-Internals-The-Refspec –