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

fir*_*dev 15 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'
Run Code Online (Sandbox Code Playgroud)

建议?它在升级到1.8之前正在工作.

$ git remote -v
origin  gitosis@xxx.xx:xxx.git (fetch)
origin  gitosis@xxx.xx:xxx.git (push)
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后我首先尝试了这个:

$ 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
Run Code Online (Sandbox Code Playgroud)

不知道那是什么,为什么它是腐败的.

$ 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'
Run Code Online (Sandbox Code Playgroud)

仍然没有工作,但origin master至少工作:

$ git push origin master
Counting objects: 42, done.
To gitosis@xxx.xx:xxx.git
3e3fc87..6e11d2a  master -> master
Run Code Online (Sandbox Code Playgroud)

好的,这种方法可以解决,但问题的原因是什么?为什么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 = gitosis@xxx.xx:xx.git
push = HEAD
[branch "master"]
remote = origin
merge = refs/heads/master

ls .git/refs/remotes/origin:

HEAD    master  refs
Run Code Online (Sandbox Code Playgroud)

最后,现在我git push origin master每次都要做.而最令人讨厌的是一些回购工作git push,但在大多数情况下,我必须添加,origin master但我不明白为什么,并且它不能是我独自解决这个问题.

jcw*_*jcw 18

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

git push master otherBranch master moreBranches
Run Code Online (Sandbox Code Playgroud)

产生此错误.一旦你意识到你已经完成修复就很明显了:

git push master otherBranch moreBranches
Run Code Online (Sandbox Code Playgroud)


小智 5

就我而言,我的分支名称中有一个空格:

git push origin 353-applyPermissions :353-applyPermissions
Run Code Online (Sandbox Code Playgroud)

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

git push origin 353-applyPermissions:353-applyPermissions
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 0

遵循这个 git 旧补丁(2007!)中的解释

一些参考文献会过时,例如,当分叉者重新设置基础并丢失分叉所需的一些对象时。
处理这些引用的快速而肮脏的方法是删除它们并再次推送它们。

但是,git-push首先会获取 ref 的当前提交名称,由于 ref 没有指向有效对象,因此会收到 null sha1,然后告诉receive-pack它应该删除具有此提交名称的 ref。
delete_ref()随后将被调用,并检查resolve_ref()(不检查对象的有效性)返回相同的提交名称。这会失败。

refs/heads/refs/heads/master看起来像是一个错误地命名为“refs/heads/master”的分支(使用命名空间来定义分层分支名称),并且指向任何内容。
删除它是正确的举动。