Vitalii Zurian Vitalii Zurian - 5 months ago 28
Git Question

GIT - unable to remove specific branch from remote repository

I cannot remove a remote branch called

. I guess it's because the branch name starts with
, but I am not sure:

$ git branch -r | grep 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 push origin :featureBranch
gives the same error.


In remote branch is
, locally it is

I know what
usually means, but in my case - this is part of name of the branch.

Github does not see this branch.

Could please anyone explain me what happens "behind the scene" and how can I remove this branch?


Try this:

git push origin :refs/heads/origin/featureBranch

You can always reference branches by their technical name under refs/heads/.

A branch is stored as a small text file under .git/refs/. Local branches go under .git/refs/heads/, and remote branches under .git/refs/remotes/<remotename>/. A simple branch like master will thus be found at .git/refs/heads/master and .git/refs/remotes/origin/master, but your buggy branch will actually reside under .git/refs/heads/origin/featureBranch. It will not be confused with a remote branch on the origin repository because it's not under refs/remotes/origin/, but under refs/heads/.

On the remote server, the origin/featureBranch branch is local to the server, so it will be stored under refs/heads/. When pushing to a given branch, you can identify it either by its name, or by its path, so if a name doesn't work, just use the full path starting with refs.

How you ended up with this weird branch name? I can't tell for sure, since I don't know what you did, but I encountered the same problem when I used git push --mirror, which pushes all the references, including remote ones, so it will create an origin/branchname as a local branch.