Applying .gitignore to committed files
I have committed loads of files that I now want to ignore. How can I tell git to now ignore these files from future commits?
EDIT: I do want to remove them from the repository too. They are files created after ever build or for开发者_如何学运维 user-specific tooling support.
After editing .gitignore
to match the ignored files, you can do git ls-files -ci --exclude-standard
to see the files that are included in the exclude lists; you can then do
- Linux/MacOS:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
- Windows (PowerShell):
git ls-files -ci --exclude-standard | % { git rm --cached "$_" }
- Windows (cmd.exe):
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
to remove them from the repository (without deleting them from disk).
Edit: You can also add this as an alias in your .gitconfig file so you can run it anytime you like. Just add the following line under the [alias] section (modify as needed for Windows or Mac):
apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
(The -r
flag in xargs
prevents git rm
from running on an empty result and printing out its usage message, but may only be supported by GNU findutils. Other versions of xargs
may or may not have a similar option.)
Now you can just type git apply-gitignore
in your repo, and it'll do the work for you!
- Edit
.gitignore
to match the file you want to ignore git rm --cached /path/to/file
See also:
- How do I git rm a file without deleting it from disk?
- Remove a file from a Git repository without deleting it from the local filesystem
- Ignoring a directory from a Git repo after it's been added
to leave the file in the repo but ignore future changes to it:
git update-index --assume-unchanged <file>
and to undo this:
git update-index --no-assume-unchanged <file>
to find out which files have been set this way:
git ls-files -v|grep '^h'
credit for the original answer to http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/
Be sure that your actual repo is the latest version and without ongoing changes
- Edit
.gitignore
as you wish git rm -r --cached .
(remove all files)git add .
(re-add all files according to gitignore)
then commit as usual
Old question, but some of us are in git-posh
(powershell). This is the solution for that:
git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }
- Add your filename/file-path into the
.gitignore
file. - Now run command in git bash
git rm --cached file/path/from/root/folder
- Now commit your code using
git commit
.
Now the file should not get tracked in the git status
command.
I tend to forget / am too lazy to read what these git commands do. So I do it like this:
- I move all files, which I want to ignore, temporarily outside the repository
- I commit these "deleted files" in my git GUI (they are now untracked)
- I update the .gitignore file
- I move the files back into the repository (or delete them, if that was my intention)
İf you already committed, you can use this:
- Add folder path to .gitignore file.
- Run this command for removing exe (for another file extensions, just write "*extension") files.
git rm --cached *exe
- Commit changes.
You should do this for every extension that you wanted to remove.
After editing .gitignore file.
git rm -r --cached ./ && git add ./ && git commit -a -m "Removing ignored files" && git push
Follow these steps:
Add path to
gitignore
fileRun this command
git rm -r --cached foldername
commit changes as usually.
精彩评论