$ git branch -a
* SocialAct
master
remotes/origin/HEAD -> origin/master
remotes/origin/SocialAct
remotes/origin/social
I want to delete
Deleting remote branches is described in detail over here.
The below command will delete the remote tracking branch but not the branch which exists on remote
$ git branch -d -r origin/social
Deleted remote branch origin/social (was 26f6f61).
To delete remote branch:
git push origin :social
This will automatically delete the remote tracking branch i.e remotes/origin/social.
I had this error (from above):
Thanks. Actually I noticed this solution and tried earlier. But this gives following error... $ git push origin :heads/socail Enter passphrase for key '/h/.ssh/id_rsa': error: unable to push to unqualified destination: heads/socail 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@xxxxxx.git' – Himel May 24 '10 at 9:37
It seemed to have gotten confused about whether or not I had actually deleted it remotely. I worked around it like so:
git push origin HEAD:branch_to_delete
git push origin :branch_to_delete
That worked for me. Using: git version 1.7.3.1.msysgit.0.
git push origin :social
But you need to delete locally as well, before or after.
As mentioned by @Josh in a comment on Nathan McDaniel's Answer, this is likely due to the branch no longer existing in the remote repository. This causes git branch -a
to still show the branch under origin
(or whatever you happened to name this particular remote), but deleting the branch on the remote repository is impossible because it no longer exists on the remote. This could have been caused by deleting the branch on the remote from another computer (on top of the fact that git pull
and git fetch
do not remove references to remote branches that have been deleted from the remote repository).
Simply remove all remote-tracking branches that have already been removed from the remote repository with git remote prune
:
git remote prune REMOTENAME
For example, if your remote's name is origin
(likely), the above command would look like:
git remote prune origin
From the documentation provided with git
:
git remote prune [-n | --dry-run] <name>
Deletes all stale remote-tracking branches under
<name>
. These stale branches have already been removed from the remote repository referenced by<name>
, but are still locally available in "remotes/".With
--dry-run
option, report what branches will be pruned, but do not actually prune them.