2011-09-26 20 views
1

我已經搜索了很高和理解這一點,我覺得它只是滑過我的手指。這裏有類似但不相同的QnAs。添加遠程+交換名稱與出處,給出錯誤:「git fetch origin; git merge」works,!=「git pull」有錯誤 - 爲什麼?

問題:

$ git pull 
Your configuration specifies to merge with the ref 'master' 
from the remote, but no such ref was fetched. 

git fetch給什麼,其次是git merge origin它說Already up-to-date.,這是我所期待的有git pull工作 '正常'。

$ cat .git/config 
[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[remote "official"] 
    url = git://github.com/freenet/wininstaller-official.git 
    fetch = +refs/heads/*:refs/remotes/official/* 
[remote "origin"] 
    url = git://github.com/freenet/wininstaller-staging.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    tagopt = --tags 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[branch "t"] 
    remote = origin 
    merge = refs/heads/master 

$ cat .git/refs/remotes/origin/master 
1a30b106723624321366f40a078c9ca4c28394ec 

$ cat .git/refs/heads/master 
1a30b106723624321366f40a078c9ca4c28394ec 

爲什麼git pull會給出錯誤,而git fetch/merge會產生預期的輸出?

背景: 我克隆了一個git repo,freenet/wininstaller-official.git,然後看到了wininstaller-staging.git並認爲「這裏可能有一些不實際的重疊,我應該添加'staging'作爲遠程第一個回購「。是的,現在我們正在用git做飯!這將是如此高效。

然後我認爲「舞臺可能會更好地跟蹤,我們稱之爲起源,讓我的本地主人跟蹤新的起源/主人」。哇!優步 - 我是我!

所以,我重新命名遙控器,刪除本地主,結帳新的主跟蹤新的起源/主。

git fetch; git merge似乎證明它的正確性!

但唉,git pull出錯。禍是我。事實並非如此超級精英的所有:(

TIA

回答

5

git pull錯誤抱怨它不能找到你告訴它從合併後支。我懷疑這是因爲你有tagopts = --tags配置爲origin,並與該選項,git fetchdoesn't fetch branch heads嘗試刪除該行,並再次運行git pull

爲了解釋pull/fetch-and-merge區別:當你手動運行git fetch,它沒有得到--tags選項,所以它確實獲取分支頭。所以,在那之後,origin/master存在並可以從中合併。其他


一個說明可能是值得補充說:這是比較正常的使用git merge origin/<branch-name>,這比git merge origin更加明確。在這種更爲不尋常的情況下,git將origin解釋爲分支refs/remotes/origin/HEAD - 即上一次從那裏獲取的遠程存儲庫origin中的當前分支(或提交)。爲了避免混淆,最好堅持使用git merge origin/<branch-name>

+0

太棒了!釘! – zenaan

+0

@zenaan:應該被標記爲解決方案。 – l0b0

相關問題