推送裸Git仓库时出现'receive.denyCurrentBranch'错误

时间:2010-10-23 12:49:30

标签: git push git-push git-bare

有一个远程git bare repo,我从一台机器上推了一个分支,然后拉到另一台机器上。

在另一台机器上做了一些更改,试图将这些更改推回到远程裸仓库,我收到'receive.denyCurrentBranch'错误。

发生了什么事?

这不应该发生在一个裸露的回购中 - 没有任何东西可以检查出来。

从机器2看到的分支是:

Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master

'Fix'是两台开发机器上的当前分支。

当我最初在机器2上拉动那个分支时,我做了:

git pull
git checkout -b Fix origin/Fix

我怀疑第一个“遥控器”线 - 似乎HEAD应该指向我当前的分支,但事实并非如此。想想我错过了什么,这里......

更新1 我将'Fix'分支合并到dev1分支,然后推送'dev1'分支 - 运行正常(无论如何我都要这样做)。

所以,这是一种解决方法,但我认为真正的问题是HEAD没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1')。我不知道如何改变遥控器上的头部?

1 个答案:

答案 0 :(得分:1)

从机器2,将refs从本地存储库上传到远程存储库,你可以在push命令中使用显式引用:

git push origin Fix:refs/heads/Fix

之后,在Machine 1中,您应该使用fetch命令获取远程引用

git fetch

在分支列表(git branch -a)中,您将找到origin / Fix(或者remotes / origin / Fix),您可以使用checkout命令直接浏览远程分支的内容:

git checkout origin/Fix

进行更改,提交等...然后使用机器2中使用的相同命令推送它:

git push origin Fix:refs/heads/Fix

要跟踪分支(这是,创建本地分支“指向”远程分支,请使用带 - track 选项的checkout命令):

git checkout --track -b Fix origin/Fix

然后,您可以使用本地分支修复并在没有其他参数的情况下进行推拉

git pull
git commit
git push