Git 1.8:it推送错误:dst ref/heads/master从多个src接收

Git 1.8:it推送错误:dst ref/heads/master从多个src接收,git,Git,git 1.8的另一个问题是: $ git push error: dst ref refs/heads/master receives from more than one src. error: failed to push some refs to 'gitosis@xxx.xx:xxx.git' 建议?它在升级到1.8之前工作正常 $ git remote -v origin gitosis@xxx.xx:xxx.git (fetch) origin gitosis@xxx.xx:

git 1.8的另一个问题是:

$ git push
error: dst ref refs/heads/master receives from more than one src.
error: failed to push some refs to 'gitosis@xxx.xx:xxx.git'
建议?它在升级到1.8之前工作正常

$ git remote -v
origin  gitosis@xxx.xx:xxx.git (fetch)
origin  gitosis@xxx.xx:xxx.git (push)
在谷歌搜索之后,我首先尝试了以下方法:

$ git push origin :refs/heads/refs/heads/master
remote: warning: Allowing deletion of corrupt ref.
To gitosis@xxx.xx:xxx.git
 - [deleted]         refs/heads/master
不知道那是什么,也不知道它为什么腐败

$ git pull
Already up-to-date.

$ git push
error: dst ref refs/heads/master receives from more than one src.
error: failed to push some refs to 'gitosis@xxx.xx:xxx.git'
仍然不起作用,但
原始主机
至少起作用:

$ git push origin master
Counting objects: 42, done.
To gitosis@xxx.xx:xxx.git
3e3fc87..6e11d2a  master -> master
好吧,这样就解决了问题,但问题的起因是什么?为什么起源/大师突然堕落?我如何处理git推送原点:refs/heads/refs/heads/master

.git/config

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = gitosis@xxx.xx:xx.git
push = HEAD
[branch "master"]
remote = origin
merge = refs/heads/master

ls .git/refs/remotes/origin:

HEAD    master  refs

最后,现在我每次都要做
git-push-origin-master
。最令人恼火的是,一些回购协议使用的是git push,但在大多数回购协议上,我添加了原始主数据,但我不明白为什么,也不可能只有我一个人有这个问题。

以下是(2007!)

某些引用会过时,例如,当forkee重新设置基础并丢失fork所需的某些对象时。
处理这些引用的快捷方法是删除它们并再次推送它们

但是,
git push
first将首先获取ref的当前提交名称,由于ref未指向有效对象,因此将接收空sha1,然后告诉
receive pack
它应删除具有此提交名称的ref。
随后将调用
delete\u ref()
,并检查
resolve\u ref()
(不检查对象的有效性)是否返回相同的提交名称。这将失败

refs/heads/refs/heads/master
看起来像一个名为“refs/heads/master”(使用名称空间)的分支,但没有指向任何内容。

删除它是正确的做法。

看起来您在
refs/remotes/origin
中有一个额外的
refs
树副本。请注意,在
refs/remotes/origin
中,您有一个额外的
refs
目录?我不知道这是怎么发生的,但这可能是造成你问题的原因。由于Git处理REF缩写的方式(允许您删除前缀,只使用诸如
origin/master
)之类的后缀),它可能会因为同时使用
refs/remotes/origin/master
refs/remotes/refs/remotes/origin/master
而变得混乱


我不知道它是怎么进入这种状态的;可能是Git工具中的一个bug,也可能是您在某个时候犯的错误。您通过删除跟踪此重复分支的远程分支修复了问题的一半。我敢打赌,如果您删除
refs/remotes/origin/refs
目录,您可以修复问题的另一半,并且能够再次执行
git push

另一种获得此错误的方法是,如果您不小心输入了尝试推送两次的分支的名称,即:

git push master otherBranch master moreBranches
产生这个错误。一旦你意识到你已经做了,修复是显而易见的:

git push master otherBranch moreBranches

在我的例子中,我有一个与分支名称同名的标记。重新命名分支名称并工作

在我的例子中,分支名称中有一个空格:

git push origin 353-applyPermissions :353-applyPermissions
返回>错误:dst ref refs/heads/353 applyPermissions从多个src接收。 但这一条有效:

git push origin 353-applyPermissions:353-applyPermissions

能否显示
.git/config
部分的内容
[远程“源站”]
[分支机构“主机”]
?另外,
ls.git/refs/remotes/origin
。给你,但那是在我“修复”了它之后,我遇到了同样的问题,除了我从未有过refs/heads/refs/heads/任何地方(在.git/和服务器端都查看过)。我在全局配置中确实有这些建议:push.default=matching remote.origin.push=head我不明白-我可能有几个分支,但我只是提交到自己的存储库中,独自处理项目。这是某种1.8转换错误吗?@Nick no,我想这更多的是远程回购中的一种不正确状态,您拉了远程回购,引入了不正确的分支名称“
refs/heads/master
”。这就是下一次推送的问题。几天后,我做了一些更改,无法再次推送。现在我做了一些更改,我又遇到了同样的问题。@Nick你做了哪些更改?你是否像我提到的那样删除了
.git/refs/remotes/origin/refs
?请记住,您需要对它执行
rm-r
,因为它是一个目录,您需要删除它的所有子目录。我的意思是,我已经更改了一些代码,想要推送。甚至
rm-r
也没有帮助,但我可以使用git
push origin master
$rm-r.git/refs/remotes/origin/refs/$git push error:dst ref refs/heads/master从多个src接收。错误:无法将某些引用推送到'gitosis@xxx.xx:xx.git'