无法将本地分支推送到远程Git回购

时间:2011-06-16 09:45:17

标签: git branch git-branch

我遇到了多个开发人员共享的git repo的问题。一个分支似乎已经丢失(种类),当我尝试使用此分支推送到远程仓库时,我收到以下消息...

To git@hades:bbis.git
 * [new branch]      dompdf0.52 -> dompdf0.52
 ! [rejected]        live -> live (non-fast-forward)
error: failed to push some refs to 'git@hades: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,但是当查看live分支的短日志时,它会在live的同一点显示master master位于live短信中。

我对这里发生的事情感到有点困惑,我可以看到gitk分支在远程仓库中,但未在主仓库日志中显示。

有没有人有任何想法?如果您需要git fetch

中的任何图片,请与我们联系 编辑:我想提一下,我试图通过执行git pullgit push --force来解决错误消息,但无济于事。我唯一没试过的是fatal: ref ed2cacdacad22c75ca765cfc996304c8c7c8a654 is not a symbolic ref fatal: ref 98c37bd8a9ef2fc16e882c17b4c04f417ae7b2b2 is not a symbolic ref ,因为我不想失去我的历史。

编辑2:运行提供的脚本后,我收到以下内容:

{{1}}

2 个答案:

答案 0 :(得分:1)

也许'live'是对master的象征性引用?在这种情况下,它仅作为别名,更新它(可能?)更新主引用。

应使用git-update-ref更新符号引用。说实话,我只使用过一次符号引用而从未将它们推到遥控器上。 git push(send-pack或receive-pack)可能无法理解符号引用,并尝试通过首先解析符号引用将它们视为普通引用。

请参阅What's the recommended usage of a Git symbolic reference?了解背景

git refs的背景资料: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添加到rev-​​list

答案 1 :(得分:1)

您所遇到的只是因为有人在中间更新了分支而不允许您推送。在推送更改之前,您需要拉动此分支。 git pull --all不起作用的原因可能是因为你的本地实时分支没有设置为跟踪origin / live

试试这个:

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