I added over 9000 photos by accident to my project folder. And committed them. Then deleted them from disk. Committed.
Now I try to push changes to git server. But it takes too long and tries to send 12 Gb of data.
I checked files size on disk and see that really .git
folder takes 12 Gb.
How to delete photos from there? I tried git rm
, but fails:
? git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Because I allready deleted them from disk, but they are still in .git
folder.
I tried to add public/photos
to .gitignore
:
public/photos/
*.zip
But no result.
Of course I could hard reset head
to moment when I did not have so many junk photos in my project. But since that time i committed many times and made a lot changes in code.
This question is related to
git
git-filter-branch
Step 1
Add the file name(s) to your .gitignore
file.
Step 2
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch YOURFILE' \
--prune-empty --tag-name-filter cat -- --all
Step 3
git push -f origin branch
A big thank you to @mu.
using this worked for me
git rm -f --cached <filename>
This chains work in my case:
git rm -r WebApplication/packages
There was a confirmation git-dialog. You should choose "y" option.
git commit -m "blabla"
git push -f origin <ur_branch>
I had a duplicate directory (~web/web) and it removed the nested duplicate when I ran rm -rf web
while inside the first web folder.
A very simple answer is.
Step 1:
Firstly add your untracked files to which you want to delete:
using git add .
or git add <filename>
.
Step 2:
Then delete them easily using command git rm -f <filename>
here rm=remove and -f=forcely.
git stash
did the job,
It restored the files that I had deleted using rm
instead of git rm
.
I did first a checkout of the last hash, but I do not believe it is required.
To remove the tracked and old committed file from git you can use the below command. Here in my case, I want to untrack and remove all the file from dist
directory.
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch dist' --tag-name-filter cat -- --all
Then, you need to add it into your .gitignore
so it won't be tracked further.
Source: Stackoverflow.com