To reproduce (from <https://unix.stackexchange.com/q/469708/3645>): $ cd "$(mktemp --directory)" $ mkdir foo\ bar $ touch foo\ bar/test $ git init Initialized empty Git repository in /tmp/tmp.iGmBR6y2xR/.git/ $ git status --short ?? foo bar/ $ cat > .gitignore << EOF > * > !foo bar > !foo\ bar > !"foo bar" > "!foo bar" > !foo* > !foo bar/ > !foo\ bar/ > !"foo bar/" > "!foo bar/" > !foo*/ > EOF $ git status --short [no output] The pattern *can* be negated if it only matches directories: $ cat > .gitignore << EOF > */ > !foo\ bar/ > EOF $ git status --short ?? .gitignore ?? foo bar/ I encountered this problem because Visual Studio Code creates a configuration directory called "Code - OSS", and I exclude everything in ~/.config by default to avoid noise in `git status`. $ git --version git version 2.19.0 -- Kind regards Victor Engmark