6

有一个远程 git 裸仓库,我从一台机器上推送了一个分支,然后拉到另一台机器上。

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

这是怎么回事?

这不应该发生在裸回购上 - 没有任何检查。

从机器 2 看到的分支是:

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

“修复”是两台开发机器上的当前分支。

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

git pull
git checkout -b Fix origin/Fix

我怀疑第一条“远程”行 - 似乎 HEAD 应该指向我当前的分支,但事实并非如此。觉得我错过了什么,在这里..

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

所以,这是一种解决方法,但我认为真正的问题是 HEAD 没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1')。我不确定如何更改远程仓库的头部?

4

1 回答 1

1

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

git push origin Fix:refs/heads/Fix

之后,在机器 1 中,您应该使用 fetch 命令获取远程 refs

git fetch

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

git checkout origin/Fix

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

git push origin Fix:refs/heads/Fix

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

git checkout --track -b Fix origin/Fix

然后,您可以在本地分支Fix 上工作并在没有其他参数的情况下进行推送和拉取

git pull
git commit
git push
于 2011-04-11T17:21:06.297 回答