The problem is that after the fix is merged the local repo still has the branch that tracks the origin (your public repository).
To remove the local branch it is simple:
git branch -d feature_x
To remove the actual branch in the remote repository:
git push origin --delete feature_x
But, still the local tracking branches remain, those pesky 'remotes/origin/feature_x'. Here is an example from one of my repos:
$ git branch -a
activestate
master
next
* py.test
sysplatformtest
remotes/activestate/master
remotes/origin/HEAD -> origin/master
remotes/origin/appauthor-fallback
remotes/origin/linux-fixes
remotes/origin/master
remotes/origin/next
remotes/origin/py.test
remotes/origin/root-directories
remotes/origin/sysplatformtest
remotes/origin/wrapper-defaults
All of those can be removed with this command:
git remote prune origin
And the output for my appdirs repository is:
Pruning originWhich, finally removes those damned refs:
URL: git@github.com:eddyp/appdirs.git
* [pruned] origin/appauthor-fallback
* [pruned] origin/linux-fixes
* [pruned] origin/next
* [pruned] origin/root-directories
* [pruned] origin/sysplatformtest
* [pruned] origin/wrapper-defaults
$ git branch -aGreat!
activestate
* master
py.test
remotes/activestate/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/py.test
Update 2013-07-24: There have been also other solutions proposed in the comments section. I am quoting them here for better visibility.
Besides the solution I proposed, people commented about other alternatives for pruning remote branches, by using git fetch --prune or by using git-push's --prune option.
Brice provided a method to remove specific branches one by one with git branch -dr command:
git branch -dr origin/fooWhat is ironic is that in the past I have used this format, and before writing the original article I was looking for this, but haven't found it that easily. I hope this article will help some other poor soul or myself in the future.
4 comments:
git branch -dr origin/foo should also work
so does "git fetch --prune"
git push also takes a --prune option.
What I find interesting is that for Mercurial people are glad they see old branches, and it's the same for ClearCase, but the workflow and the interface (seeing them as distinct remote branches) for git makes it really annoying to have such branch names.
Post a Comment