我无法移除名为origin/featureBranch
的远程分支。我想这是因为分支名称以origin
开头,但我不确定:
$ git branch -r | grep featureBranch
origin/origin/featureBranch
$ git push origin :origin/featureBranch
error: unable to push to unqualified destination: origin/featureBranch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@github.com:myCompany/my-repo.git'
更新
$ git push origin :featureBranch
会出现同样的错误。
注意
在远程分支origin/origin/myFeature
,本地是origin/myFeature
。
我知道origin
通常意味着什么,但就我而言 - 这是分支名称的一部分。
Github没有看到这个分支。
可以请任何人解释一下“幕后”会发生什么,我该如何删除这个分支?
答案 0 :(得分:9)
试试这个:
git push origin :refs/heads/origin/featureBranch
您始终可以在refs/heads/
下的技术名称中引用分支。
分支存储为.git/refs/
下的小文本文件。本地分支位于.git/refs/heads/
下,远程分支位于.git/refs/remotes/<remotename>/
下。因此可以在master
和.git/refs/heads/master
找到类似.git/refs/remotes/origin/master
的简单分支,但您的错误分支实际上位于.git/refs/heads/origin/featureBranch
下。它不会与origin
存储库上的远程分支混淆,因为它不在refs/remotes/origin/
下,而是在refs/heads/
下。
在远程服务器上,origin/featureBranch
分支是 local 到服务器,因此它将存储在refs/heads/
下。当推送到给定分支时,您可以通过其名称或路径来识别它,因此如果名称不起作用,只需使用以refs
开头的完整路径。
你是如何结束这个奇怪的分支名称的?我无法确定,因为我不知道你做了什么,但是当我使用git push --mirror
时,我遇到了同样的问题,它推送了所有引用,包括远程引用,因此,它会创建一个origin/branchname
作为本地分支。
答案 1 :(得分:2)
这应该有效:
$ git push origin :featureBranch
您已经指定了推送的位置,origin/
只是您本地分支的名称。
背景:当git进行提取时,它会创建所谓的“远程跟踪分支”。 那些与你自己的分支没有什么不同,它们只是以远程名称(例如origin / master)为前缀,并在本地表示服务器分支(所有提交都已被提取)。
当您执行推送源时,您根本不是指本地远程跟踪分支,而是告诉Git“推送到源sourcebranch:targetbranch”
答案 2 :(得分:1)
消息的这一位说它找不到任何匹配的分支。
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
如果我尝试删除分支两次,这就是我得到的。 (第一个成功,第二个失败)。
或者如果分支已被其他人删除。您可以尝试git remote prune
,看看它是否会从您的git branch -r
输出中消失。您还可以使用origin
检查分支是否在git ls-remote git@github.com:myCompany/my-repo.git
上。
在origin/master
上删除名为origin
的奇怪(严重?)命名分支对我来说很合适:
$ git push origin master:origin/master
Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To ../bare/
* [new branch] master -> origin/master
$ git branch -r
origin/origin/master
$ git push origin :origin/master
To ../bare/
- [deleted] origin/master
答案 3 :(得分:0)