Reputation: 4166
I noticed recently that the project files my text editors use (along with some other junk) got added the git repository for the project. Since they aren't actually part of the project, I'd like to remove them, but git rm
doesnt remove the old versions from the repository, and I couldnt find anything else that looks promising.
Upvotes: 85
Views: 40560
Reputation: 17334
It's now recommended to use git-filter-repo instead. Running git-filter-branch
actually prints:
WARNING: git-filter-branch has a glut of gotchas generating mangled history
Upvotes: 4
Reputation: 410552
The tool you want is git filter-branch
. Its usage is described here, but basically:
$ git filter-branch --tree-filter 'rm -f my_file' HEAD
will remove "my_file" from every commit.
Notice that this rewrites every commit, so if you push into a remote repository, you have to (a) force the update, and (b) everyone else who pulled from you will now have duplicate commits (since you rewrote the history), as described on the git rebase
man page.
Upvotes: 150
Reputation: 1716
This is what git filter-branch
is for, but beware that your repo history will change, and the commit hashes will be different after history rewrite.
If you also want to free the space, I recommend that you use git forget-blob
, because git filter-branch
alone will not make git forget your file, as it may still be referenced by remotes, reflog, tags and such.
git forget-blob main.c.swp
You can get more information here
Upvotes: 11