Vitalii Zurian Vitalii Zurian - 1 month ago 10
Git Question

GIT - unable to remove specific branch from remote repository

I cannot remove a remote branch called

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

$ 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'


UPDATE

$ git push origin :featureBranch
gives the same error.

NOTE

In remote branch is
origin/origin/myFeature
, locally it is
origin/myFeature
.

I know what
origin
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?

Answer

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.

Comments