2011-06-16 169 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