Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GIT - unable to remove specific branch from remote repository

Tags:

git

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 '[email protected]: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?

like image 413
Vitalii Zurian Avatar asked Dec 12 '22 23:12

Vitalii Zurian


1 Answers

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.

like image 116
Sergiu Dumitriu Avatar answered Dec 14 '22 11:12

Sergiu Dumitriu