Search code examples
gitgit-rm

git rm --cached everything that is listed in .gitignore


I added .gitignore to my project after I had everything commited. Now I want to run a command like:

git rm --cached *everything_listed_in_gitignore*

How can this be achieved? Thank you in advance.


Solution

  • I'm always using the following line to remove files listed in my .gitignore:

    grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
    
    1. This will find lines in .gitignore that do not match (-v option to grep) the regular expression ^(#|\$) matching lines that start with # (comments) or empty lines.

    2. Then sed will remove a forward slash / at the start of the line.

    3. The results are passed to rm -f using xargs, which you could replace with git rm --cached

    Note:

    Your .gitignore file can contain entries like *.tmp to ignore all .tmp files throughout the project. The above command would only remove *.tmp files from the root. Only full paths will be handled correctly.