.gitignore: что git не должен замечать
Обновлено 31 июля 2026 г.
.gitignore - это файл со списком того, что git должен игнорировать: временные файлы, каталоги зависимостей, собранные артефакты, локальные секреты.
Лежит он обычно в корне репозитория и коммитится наравне с кодом, чтобы у всех, кто заберёт проект, git молчал про одно и то же. Одно правило на строку.
$ cat .gitignore
# зависимости и сборка
node_modules/
build/
# логи и локальное
*.log
.env
.DS_Storenode_modules/ - каталог целиком, косая черта в конце говорит, что правило про каталог. *.log - маска: звёздочка заменяет любой набор символов внутри имени. .env - точное имя. # в начале строки - комментарий. Правило, в котором косой черты нет вовсе, действует на любой глубине. Как только черта появляется (/build, docs/tmp), путь отсчитывается от каталога, где лежит сам .gitignore, и вложенный a/docs/tmp под такое правило уже не попадёт. Строка с ! возвращает файл обратно: *.log прячет все логи, а если добавить ниже !logs/keep.log, один останется на виду.
Какое правило спрятало файл, показывает git check-ignore:
$ git check-ignore -v build/app.js
.gitignore:3:build/ build/app.jsФайл .gitignore можно положить и в подкаталог: его правила действуют от этого каталога и вниз.
Файл, который уже отслеживается
Деталь, на которой спотыкаются все. .gitignore работает только с тем, за чем git ещё не следит. Если config.env однажды попал в коммит, новое правило не изменит ничего: файл отслеживается, и git продолжит показывать его изменения. Сначала его нужно убрать из-под наблюдения, оставив на диске:
$ git rm --cached config.env
rm 'config.env'
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: config.envФлаг --cached тут главный: без него git rm стёр бы файл и с диска. После коммита правило начинает работать, и в git status файл больше не появится.
Частые ошибки
Отрицание не работает, если исключён весь каталог: при правиле logs/ строка !logs/keep.log ничего не даст, потому что внутрь скрытого каталога git не заходит. Пиши logs/*, тогда исключение сработает. Второе: git add debug.log на игнорируемый файл откажется работать и подскажет флаг -f - подумай, точно ли он тебе нужен. И главное: попавший в историю секрет .gitignore оттуда не убирает. Ключ, который хоть раз был в коммите, считай скомпрометированным и перевыпусти.
Где это в учебнике
Подробный разбор - Глава 4. Посмотреть, отменить, спрятать лишнее. Рядом пригодится git status.
Потренироваться руками - в интерактивном уроке Отмена изменений.