Reputation: 28596
I have a commit with the ID 56f06019
, for example. In that commit I have accidentally committed large file (50 MB). In another commit I added the same file but in the right size (small). Now my repo is too heavy when I clone. How do I remove that large file from the repo history to reduce the size of my repo?
Upvotes: 169
Views: 89790
Reputation: 1046
I tried using the following answer on windows https://stackoverflow.com/a/8741530/8461756
Single quote does not work on windows; you need double-quotes.
Following worked for me.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot/bigfile.csv" -- --all
After removing the big file, I was able to push my changes to GitHub master.
Upvotes: 13
Reputation: 342
You can use a simple Command to deleted
git rm -r -f app/unused.txt
git rm -r -f yourfilepath
Upvotes: -1
Reputation: 5282
You can use git-extras tool. The obliterate command completely remove a file from the repository, including past commits and tags.
https://github.com/tj/git-extras/blob/master/Commands.md
Upvotes: 25
Reputation: 393934
Chapter 9 of the Pro Git book has a section on Removing Objects.
Let me outline the steps briefly here:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
Like the rebasing option described before, filter-branch
is rewriting operation. If you have published history, you'll have to --force
push the new refs.
The filter-branch
approach is considerably more powerful than the rebase
approach, since it
filter-branch
keeps backups too, so the size of the repo won't decrease immediately unless you expire the reflogs and garbage collect:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger
Upvotes: 225
Reputation: 536
You will need to git rebase in the interactive mode see an example here: How can I remove a commit on GitHub? and how to remove old commits.
If your commit is at HEAD minus 10 commits:
$ git rebase -i HEAD~10
After the edition of your history, you need to push the "new" history, you need to add the +
to force (see the refspec in the push options):
$ git push origin +master
If other people have already cloned your repository, you will to inform them, because you just changed the history.
Upvotes: 1