2011-06-16 174 views
1

我在多個開發人員之間共享的git回購存在問題。一個分支似乎已經失蹤(種),當我試圖推動與這個分支我收到以下消息遠程回購...無法將本地分支推送到遠程Git回覆

To [email protected]:bbis.git 
* [new branch]  dompdf0.52 -> dompdf0.52 
! [rejected]  live -> live (non-fast-forward) 
error: failed to push some refs to '[email protected]:bbis.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

有在回購3個分支:

  • dompdf0.52是一個臨時分支,我升級了DOMPDF(這是好的)
  • 現場(這是有問題的分支)

我是使用活動分支(用於部署到活動服務器)的唯一開發人員,並且我直接在這個分支中做了一些工作(我不知道這是一個好主意,但這是一個錯誤)並在本地執行。我嘗試推送時遇到此錯誤。

其他開發人員不知道live分支或dompdf0.5.2分支(我創建了這兩個分支,但將它們推送到遠程回購 - 它們甚至在gitweb接口中顯示爲HEADS)。即使開發者做了git pull --all,它仍然不會拉下這些分支。

另一個奇怪的現象是,在GitWeb裏查看日誌時,它只顯示master,但看shortlogs爲live分支當它顯示live在相同的點,其中mastermaster shortlog。

我對這裏發生了什麼感到有點困惑,從我所看到的live分支處於遠程倉庫,但沒有顯示在主倉庫中。

有沒有人有任何想法?讓我知道,如果你從gitk

編輯需要的任何圖片:只是想我會提,我試着做一個git fetchgit pull,但無濟於事,以解決該錯誤消息。我沒有試過的唯一的事情是git push --force,因爲我不想失去我的歷史。

編輯2:運行sehe提供的劇本後,我收到了以下:

fatal: ref ed2cacdacad22c75ca765cfc996304c8c7c8a654 is not a symbolic ref 
fatal: ref 98c37bd8a9ef2fc16e882c17b4c04f417ae7b2b2 is not a symbolic ref 

回答

1

你正在經歷的只是你是否因爲有人已經更新了分支之間的分支,所以允許推送。您需要拉動這個分支,然後才能推送您的更改。究其原因混帳拉--all不起作用,可能是因爲你的本地分支現場沒有設置跟蹤起源/現場

試試這個:

git branch --set-upstream live origin/live 
git checkout live 
git pull 
git push 
+0

乾杯,這工作:) – JamesHalsall 2011-06-17 08:00:52

1

也許是「活」是一個象徵性的參考,掌握?在這種情況下,它僅僅作爲一個別名,更新它會(可能?)更新主引用。

符號參考應更新與git-update-ref。說實話,我只有一次使用過符號引用,並且從未將它們推送到遠程。 git push(send-pack或receive-pack)可能不理解符號引用,並嘗試通過首先解析符號引用將它們視爲正常引用。

背景見What's the recommended usage of a Git symbolic reference?

混帳裁判的背景:http://progit.org/book/ch9-3.html

使用此找出是否你的部門是象徵性的裁判:

for ref in $(git rev-list --branches --no-walk); do 
    git symbolic-ref "$ref" 
    git check-ref-format --print "$ref" 
done 

對於所有的(遠程)分支,就添加--all改版列表

+0

感謝您的答覆,我現在試試這個。如果我最初創建'git branch live'來創建分支,是否會創建符號引用? – JamesHalsall 2011-06-16 10:46:24

+0

@sehe我可以在腳本中執行'git'嗎?在腳本中運行該代碼會拋出關於'git'不是命令的錯誤 – JamesHalsall 2011-06-16 10:51:05

+0

(1)symbolic-refs不會偶然發生(分支會創建正常參考); (2)毫無疑問,您遇到了PATH或別名問題;嘗試使用完整路徑('/ usr/bin/git'或'「c:\ msysgit \ msysgit \ bin \ git.exe」') – sehe 2011-06-16 10:57:31