2013-12-12 105 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 –