Git command to show which specific files are ignored by .gitignore Git command to show which specific files are ignored by .gitignore git git

Git command to show which specific files are ignored by .gitignore


Notes:


Also interesting (mentioned in qwertymk's answer), you can also use the git check-ignore -v command, at least on Unix (doesn't work in a CMD Windows session)

git check-ignore *git check-ignore -v *

The second one displays the actual rule of the .gitignore which makes a file to be ignored in your git repo.
On Unix, using "What expands to all files in current directory recursively?" and a bash4+:

git check-ignore **/*

(or a find -exec command)

Note: https://stackoverflow.com/users/351947/Rafi B. suggests in the comments to avoid the (risky) globstar:

git check-ignore -v $(find . -type f -print)

Make sure to exclude the files from the .git/ subfolder though.

CervEd suggests in the comments, to avoid .git/:

find . -not -path './git/*' | git check-ignore --stdin

Original answer 42009)

git ls-files -i

should work, except its source code indicates:

if (show_ignored && !exc_given) {                fprintf(stderr, "%s: --ignored needs some exclude pattern\n",                        argv[0]);

exc_given ?

It turns out it need one more parameter after the -i to actually list anything:

Try:

git ls-files -i --exclude-from=[Path_To_Your_Global].gitignore

(but that would only list your cached (non-ignored) object, with a filter, so that is not quite what you want)


Example:

$ cat .git/ignore# ignore objects and archives, anywhere in the tree.*.[oa]$ cat Documentation/.gitignore# ignore generated html files,*.html# except foo.html which is maintained by hand!foo.html$ git ls-files --ignored \    --exclude='Documentation/*.[0-9]' \    --exclude-from=.git/ignore \    --exclude-per-directory=.gitignore

Actually, in my 'gitignore' file (called 'exclude'), I find a command line that could help you:

F:\prog\git\test\.git\info>type exclude# git ls-files --others --exclude-from=.git/info/exclude# Lines that start with '#' are comments.# For a project mostly in C, the following would be a good set of# exclude patterns (uncomment them if you want to use them):# *.[oa]# *~

So....

git ls-files --ignored --exclude-from=.git/info/excludegit ls-files -i --exclude-from=.git/info/excludegit ls-files --others --ignored --exclude-standardgit ls-files -o -i --exclude-standard

should do the trick.

(Thanks to honzajde pointing out in the comments that git ls-files -o -i --exclude-from... does not include cached files: only git ls-files -i --exclude-from... (without -o) does.)

As mentioned in the ls-files man page, --others is the important part, in order to show you non-cached, non-committed, normally-ignored files.

--exclude_standard is not just a shortcut, but a way to include all standard "ignored patterns" settings.

exclude-standard
Add the standard git exclusions: .git/info/exclude, .gitignore in each directory, and the user's global exclusion file.


There is a much simpler way to do it (git 1.7.6+):

git status --ignored

See Is there a way to tell git-status to ignore the effects of .gitignore files?


Another option that's pretty clean (No pun intended.):

git clean -ndX

Explanation:

$ git help cleangit-clean - Remove untracked files from the working tree-n, --dry-run - Don't actually remove anything, just show what would be done.-d - Remove untracked directories in addition to untracked files.-X - Remove only files ignored by Git.

Note: This solution will not show ignored files that have already been removed.