有一个远程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')。我不知道如何改变遥控器上的头部?
答案 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