git 1.8的另一个问题:
$ git push
error: dst ref refs/heads/master receives from more than one src.
error: failed to push some refs to '[email protected]:xxx.git'
建议?在升级到1.8之前它正在工作。
$ git remote -v
origin [email protected]:xxx.git (fetch)
origin [email protected]:xxx.git (push)
谷歌搜索后我首先尝试了这个:
$ git push origin :refs/heads/refs/heads/master
remote: warning: Allowing deletion of corrupt ref.
To [email protected]: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 '[email protected]:xxx.git'
仍然没有工作,但origin master
至少工作:
$ git push origin master
Counting objects: 42, done.
To [email protected]:xxx.git
3e3fc87..6e11d2a master -> master
好的,这种方法可以解决,但问题的原因是什么?为什么origin / master突然被破坏了?我怎么用git push origin :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 = [email protected]: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
,但在大多数情况下,我得添加origin master
但我不明白为什么,并不能是我一个人有这个问题。
获得此错误的另一种方法是,如果您不小心输入要尝试推送两次的分支的名称,即:
git push master otherBranch master moreBranches
产生此错误。一旦你意识到你已经完成修复就很明显了:
git push master otherBranch moreBranches
看起来你在refs
中有一张refs/remotes/origin
树的额外副本。请注意如何在refs/remotes/origin
中,你有一个额外的refs
目录?我不知道这是怎么到达的,但这可能是导致你出现问题的原因。由于Git处理refs缩写的方式(允许你删除前缀,只使用像origin/master
这样的后缀),因此可能会因为同时使用refs/remotes/origin/master
和refs/remotes/refs/remotes/origin/master
而感到困惑。
我不知道它是如何进入这种状态的;可能是Git工具中的一个错误,可能是你在某些时候做的错字。您通过删除跟踪此重复分支的远程分支来解决问题的一半。如果你删除git push
目录,我愿意打赌你可以修复问题的另一半,并能够再次执行refs/remotes/origin/refs
。
遵循this git old patch(2007年!)中的解释
有些裁判陈旧,例如当forkee重新出现并丢失了叉子所需的一些物品时。 处理这些引用的快速而肮脏的方法是删除它们并再次推送它们。
但是,
git-push
首先会首先获取ref的当前提交名称,因为ref不指向有效对象,所以会收到null sha1,然后告诉receive-pack
应该使用此提交名称删除ref。 随后将调用delete_ref()
,并检查resolve_ref()
(不检查对象的有效性)返回相同的提交名称。哪个会失败。
refs/heads/refs/heads/master
看起来像一个不正确地命名为“refs / heads / master”的分支(使用defining hierachical branch name的命名空间),并且没有任何指示。
删除它是正确的举措。
在我的例子中,我有一个与分支名称相同的标记。重命名分支名称和工作。