git rm - fatal: pathspec did not match any files
Solution 1:
In your case, use git filter-branch
instead of git rm
.
git rm
will delete the files in the sense that they will not be tracked by git anymore, but that does not remove the old commit objects corresponding to those images, and so you will still be stuck with pushing the earlier commits which correspond to 12GB of images.
The git filter-branch
, on the other hand, can remove those files from all the previous commits as well, thus doing away with the need to push any of them.
-
Use the command
git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch public/photos' \ --prune-empty --tag-name-filter cat -- --all
After the filter branch is complete, verify that no unintended file was lost.
-
Now add a .gitignore rule
echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos"
-
Now do a push
git push -f origin branch
Check this, this and this for further help. Just to be on the safer side, I would suggest you create a backup copy of the repo on your system before going ahead with these instructions.
As for your orignial error message, it is happening because you already untracked them using git rm
, and hence git is complaining because it can't remove a file it isn't tracking. Read more about this here.
Solution 2:
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.
Solution 3:
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.
Solution 4:
using this worked for me
git rm -f --cached <filename>