有一个远程git裸回购,我从其中一台机器上推出了一个分支,并将其拉到另一台机器上。推送到裸Git仓库时出现'receive.denyCurrentBranch'错误
提出的其他机器上的一些变化,努力推动这些更改回远程裸露的回购协议,我也得到了“receive.denyCurrentBranch”的错误。
发生了什么事?
这不应该发生在裸回购 - 没有检查出它。
从机2看到的分支是:
Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master
“修复”是在两个dev的机器当前分支。
当我最初拉机2分支上,我所做的:
git pull
git checkout -b Fix origin/Fix
我怀疑的第一个“遥控器”线 - 似乎HEAD应指向我的当前分支,但它不是。我想我失去了一些东西,在这里..
更新1 我兼并了“修复”分支下到DEV1分支,然后在PUSHD“DEV1”分支 - 即工作确定(我正要办无论如何)。
所以,这是一种解决方法,但我认为真正的问题是HEAD没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1')。我不知道如何改变远程回购的头部?
有人请纠正我,如果我错了,但裸存储库不应该连*有*为HEAD。这将表明有一个工作目录,并且HEAD指向它基于的提交...您是否确定远程回购是裸露的? – Jonathan 2010-10-26 17:08:16
非常确定。没有检出项目,所有'git'文件都位于存储库的顶级目录中。 – rickb 2010-10-27 20:34:43
Jonathan,一个纯粹的Git仓库确实有HEAD,但没有默认的工作区。裸仓库仍然可以存在工作空间,但必须使用环境变量'GIT_WORK_TREE'或Git选项'--work-tree'告知Git它存在的位置,并使用环境变量'GIT_DIR'或选项'' - -git-dir'。 – 2011-04-05 15:18:01