完全に個人的なメモ。たまに捻ったことをやろうとした時に無駄に時間を使ってしまったので。

一度 ignore 対象となったファイルを ignore から外すことは無理です。

以下の /ignored-directory/unignored.md は ignore されたままです。! は効きません。

/ignored-directory
!/ignored-directory/unignored.md

ですので ignore を書くときは対象外にしたいファイルを含めないようにうまいこと書いてあげましょう。

上記ができないのはパフォーマンス上の理由だそうです。

Git 2.7.0 で一時的にこれが実装されたが v2.7.1 で戻されている

本記事で書きたかったことがこれです。ネットで調べると 2.7 で実現できるようになったという情報を見てしまいハマったので。

2.7.0 -> 2.7.1 で削除された記述

It is possible to re-include a file if a parent directory of that file is excluded if certain conditions are met. See section NOTES for detail.

2.7.0 -> 2.7.1 で追加(戻された)された記述

It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.

FYI

[Git] .gitignore の仕様詳解 - Qiita