Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I completely remove a file from a git repository?

Tags:

git

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.

like image 991
David X Avatar asked Aug 11 '10 13:08

David X


People also ask

How do I remove a file from a git command?

The git rm command can be used to remove individual files or a collection of files. The primary function of git rm is to remove tracked files from the Git index. Additionally, git rm can be used to remove files from both the staging index and the working directory.


2 Answers

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.

like image 143
mipadi Avatar answered Oct 10 '22 12:10

mipadi


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

like image 26
nachoparker Avatar answered Oct 10 '22 12:10

nachoparker