I have a git tree like
A---B---C topic
/
D---E---F---G master <--
I would like to remove
Note May 2010: As mentioned by Jakub, if your branch was merged, topic would still be reachable.
Here, let's suppose there was no merge.
Then, as mentioned in the ProGit book and detailed in this SO question:
git gc --prune=now
should be enough (you should call directly git prune). You can control that with a git count-objects -v.
Edit April 2012: maxschlepzig in the comments confirms that extra steps might be required, as detailed in Duke's answer (but without the git repack).
So instead of a git gc --prune now:
git reflog expire --expire=now --all
git gc --aggressive --prune=now