Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GIT: remove remote branches with no local tracking branch

Let's say that git branch -a outputs something like this:

  • A
  • B
  • C
  • *master
  • remotes/origin/A
  • remotes/origin/B
  • remotes/origin/C
  • remotes/origin/master
  • remotes/origin/X
  • remotes/origin/Y
  • remotes/origin/Z

In bold are those branches (X, Y, Z) that are in the remote repository but I have not checked them out yet and I don't even intend to, they are related to a project I don't participate in.

Is there a command to remove all remote branches (those that are saved on MY repository, not the actual remote branch in the remote) which do not have a local tracking branch?

Edit: I intend to remove remote branches that are saved in my repository, showing the existence of the branch in the remote. I do not want to remove the actual branches in the remote.

Edit 2: Clarification in comment to mattmilten

You can recreate all remote branches with git pull, but I don't always git pull.

I often just git fetch origin master A B C and then merge or rebase or do anything I want with branches master, A, B or C.

Point is, whenever I "git pull" (for some reason), all the branches I don't want are created and it seems I have no simple option to remove them afterwards.

like image 617
Mirek Avatar asked Nov 02 '22 01:11

Mirek


2 Answers

No, this is not possible. The information about (all) branches is a part of your repo and will always be copied when a new clone is created. You need to ignore these branches or simply run git branch to list only your local branches.

How would you be able to retrieve remote branches at a later time, if you delete the information about their existence?

like image 120
mattmilten Avatar answered Nov 09 '22 22:11

mattmilten


I had this same problem but in a different situation. I deleted a local branch experiment1. I forgot to git branch --unset-upstream first, so I still had a remote tracking branch. Branch experiment1 was deleted from the remote after.

Later, when I ran git branch -a, it keep showing up in output as remotes/origin/experiment1. Neither git branch --unset-upstream nor git branch --delete would get rid of it because the local branch was already gone. Referencing it as origin/experiment1 instead of experiment1 did not work either.

So this is what I did:

  1. cd .git/refs/remotes/origin
  2. rm experiment1

And it no longer shows up in output and normal Git sync commands worked as expected after.

I am adding this answer because this is the top hit in an Internet search for "git remove remote-tracking branches with no local branch". Also, this question is different enough from "Remove tracking branches no longer on remote" question to not be a duplicate. If I were to wrote my own question that this answer answers, then that question would be a duplicate of this question.

like image 23
Jeff Avatar answered Nov 09 '22 20:11

Jeff