This .gitignore file does not work as expected with git-check-ignore: *.o !a.o It seems that “git check-ignore a.o” ignores that “a.o” was re-included. This is what happens: $ git --version git version 2.15.0.rc2.48.g4e40fb302 $ mkdir repo $ cd repo $ git init Initialized empty Git repository in /path/to/repo/.git/ $ echo '*.o' >.gitignore $ echo '!a.o' >>.gitignore $ >a.o $ >b.o $ git check-ignore a.o b.o a.o b.o $ git status --short ?? a.o According to git-check-ignore, “a.o” is ignored. According to git-status, it is not. Is that a bug or did I miss something because of my limited search capabilities? Tested on a Mac with current master from git. The 2.13.4 binary from Mac Ports exhibits the same behavior. Thanks!