2013-04-12 102 views
2

突然間,我再也不能從遠程讀取...混帳取起源拒絕

$git fetch origin 
! [rejected]  master  -> origin/master (non-fast-forward) 

我不知道要尋找什麼,或者發生了什麼事,因爲這是工作到現在。 沒有太多說的配置:

[remote "origin"] 
    url = http://xx.xxx.xx/project.git 
    fetch = refs/tags/*:refs/tags/* 
    fetch = refs/heads/*:refs/remotes/origin/* 
    push = refs/tags/*:refs/tags/* 
    push = refs/heads/master:refs/heads/master 

其他的同事可能推東西遙控器上的,但我們正在做這件事,因爲很長一段時間沒有問題......

+0

hmmm我做了$ git fetch origin + refs/heads/master 它似乎能夠工作......但現在我無法與遠程合併:$ git merge origin master - > fatal:'origin'does不指向提交 – Glasnhost

回答

3
  1. 當你想通你自己,你的fetch refspec是非標準的:「+」前綴缺失。它是有效,只是它不是默認情況下Git設置的,因爲默認情況下它會在提取時覆蓋遠程分支的內容。

    默認的Refspec Git的一個遠程命名看起來像這樣補充道:

    $ git config --get remote.origin.fetch 
    +refs/heads/*:refs/remotes/origin/* 
    

    所以,你應該可能只是撤消你的手做了什麼,並用默認設置堅持,直到你真正瞭解如何refspecs和獲取工作(通過至少閱讀git-fetch manual page)。

  2. git merge origin master表示«將分支「起源」和「主」合併到本地分支»(執行所謂的「章魚合併」)。

    你要麼想git pull origin master(這意味着«從「原點」取分支「主」,然後將其合併到當前已簽出分支»)或git fetch origin隨後git merge origin/master,其中「原點/主」是指遠程根據git fetch origin的結果,分支應該創建/更新(取決於上面的第一點)。

底線是,你似乎試圖通過編輯配置文件來創建一個遠程而不是僅僅運行git remote add <name> <git_url>。除非你真的瞭解內部運作,否則不要這樣做。

Reading up on remote branches也是必需的。

+0

好的!我沒有編輯自己的文件,它是從Eclipse創建的,爲了有「+」前綴,「force update」選項也應該被選中,它不是默認的。 合併起源大師是一個錯字,我沒有太多地使用控制檯......感謝您的徹底解釋! – Glasnhost

+0

@Glasnhost,強制更新*遠程*分支時提取是完全正確的,因爲他們存在的唯一原因是捕獲(緩存,如果你想)他們自己的遠程存儲庫的狀態在你最後一次從該存儲庫中獲取; IOW他們像書籤一樣工作,每次你想知道分支機構的歷史記錄時,你都無法訪問該存儲庫。如果你需要「投石問路」一個遠程分支的特定狀態,只需將你自己的本地分支分叉出去,而git fetch不會混淆它。因此Eclipse在這裏沒有任何理由在這裏安全。 – kostix