I'm using the following sources to expunge some large files and directories from my repository:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Why is my git repository so big?
git filter-branch
only seems to work on the current branch - is there a way to apply it to all branches at once?
The solution is simple:
git filter-branch [options] -- --all
Note the four dashes (two sets of double dashes with a space in between) in -- --all
.
If you look at the docs for git-filter-branch
, it says this:
git filter-branch [--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--subdirectory-filter <directory>]
[--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--] [<rev-list options>…]
Reading on, the beginning of the docs say: "Lets you rewrite git revision history by rewriting the branches mentioned in the <rev-list options>, applying custom filters on each revision."
So checking the docs for rev-list
gives:
< rev-list options >… Arguments for git rev-list. All positive refs included by these options are rewritten. You may also specify options such as --all, but you must use -- to separate them from the git filter-branch options.
And the docs for git-rev-list
say:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.