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

ric*_*ckb 6 git push git-push git-bare

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

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

这是怎么回事?

这不应该发生在一个裸露的回购 - 它没有任何检查.

从机器2看到的分支是:

Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

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

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

git pull
git checkout -b Fix origin/Fix
Run Code Online (Sandbox Code Playgroud)

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

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

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

dse*_*ara 1

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

git push origin Fix:refs/heads/Fix
Run Code Online (Sandbox Code Playgroud)

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

git fetch
Run Code Online (Sandbox Code Playgroud)

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

git checkout origin/Fix
Run Code Online (Sandbox Code Playgroud)

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

git push origin Fix:refs/heads/Fix
Run Code Online (Sandbox Code Playgroud)

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

git checkout --track -b Fix origin/Fix
Run Code Online (Sandbox Code Playgroud)

然后,您可以在本地分支Fix 上工作并进行推送和拉取,而无需其他参数

git pull
git commit
git push
Run Code Online (Sandbox Code Playgroud)