Как полностью очистить кэш Git и убрать игнорируемые файлы

Содержание
- Clearing the Entire Git Cache
- Clearing a Specific File or Directory From the Git Cache
- Clearing Cached Credentials From Git
Clearing the Entire Git Cache
Иногда .gitignore не применяется к уже отслеживаемым файлам, потому что они были добавлены в индекс ранее. Простое решение — полностью сбросить индекс (кэш) репозитория, чтобы Git заново пересчитал, какие файлы следует игнорировать.
Что делает процесс в двух строках: 1) удаляет метаданные индекса о текущих файлах, 2) добавляет файлы обратно, но уже с учётом правил .gitignore.
Откройте терминал и перейдите в папку вашего репозитория:
cd ~/your-git-repositoryСбросьте весь индекс и удалите отслеживание, сохранив файлы в рабочей директории:
git rm -r --cached .Проверьте статус и сбросьте текущие признаки изменения (если нужно):
git reset .
git statusДобавьте файлы снова, чтобы индекс обновился с учётом .gitignore:
git add .Создайте коммит с описанием, что индекс был сброшен:
git commit -am 'Reset the entire repository cache.'
Важно: эти команды не удаляют файлы из рабочей директории — они просто снимают с них отметку отслеживаемости в индексе.
Clearing a Specific File or Directory From the Git Cache
Если вы не хотите трогать весь индекс, можно удалить из индекса отдельный файл или директорию. Это полезно, когда проблема локальная — один файл был случайно добавлен и теперь мешает .gitignore.
Перейдите в каталог репозитория:
cd ~/your-git-repositoryУдаление одного файла из индекса (оставив файл в рабочем каталоге):
git rm --cached your-file-here.txtУдаление директории рекурсивно из индекса:
git rm -r --cached ./your/directory/hereПроверьте статус:
git status
Закоммитьте изменения, чтобы зафиксировать удаление из индекса:
git commit -am 'Removed unnecessary files from the repository.'Убедитесь, что индекс больше не содержит проблемных записей:
file ./.git/index
Clearing Cached Credentials From Git
Git умеет кешировать учётные данные (credential helpers). На общем компьютере или при смене учётных данных это может стать проблемой. Ниже — безопасная последовательность действий для удаления локальных и сессионных учётных данных.
Перейдите в папку репозитория (если команды вы хотите запускать локально для конкретного репозитория):
cd ~/your-git-repositoryОтключите локальный помощник по учётным данным (credential helper) для текущего репозитория:
git config --local --unset credential.helperЗавершите сессию кеша учётных данных (если используется credential-cache):
git credential-cache exitПо желанию удалите файл с учётными данными в домашней директории (если вы уверены):
rm ~/.git-credentialsПосле этого при следующем обращении к удалённому репозиторию Git запросит логин и пароль (или токен) снова.
Почему .gitignore может не работать
- Файлы уже были закоммичены до добавления в .gitignore. Решение: убрать их из индекса (
git rm --cached) и закоммитить. - Неправильный путь или синтаксис в .gitignore (пустые строки, пробелы, слэши). Проверяйте шаблоны и используйте
git check-ignore -vдля диагностики. - Глобальные правила игнорирования (core.excludesfile) перекрывают ожидания. Проверьте
git config --get core.excludesfile. - Регистр символов (Windows vs Linux) влияет на совпадения.
Альтернативный подход
- Если нужно временно игнорировать файл без удаления из индекса, можно использовать
git update-index --assume-unchanged. Это удобно локально, но не подходит для совместной работы: другие разработчики не увидят изменения. - Для больших репозиториев подход с частичным сбросом (
git rm --cachedна конкретных поддиректориях) уменьшает риск конфликтов.
Чек-лист по ролям
Разработчик
- Убедиться, что .gitignore находится в корне проекта и правила корректны.
- Запустить
git check-ignore -vдля проверки. - Если нужно, выполнить
git rm --cachedи закоммитить.
Техлид / Мейнтейнер
- Проверить глобальные gitignore и стандарты репозитория.
- Добавить шаблоны в .gitignore, если это общая проблема.
Операции / DevOps
- Проверить, не хранится ли чувствительная информация в репозитории и удалить её исторически при необходимости (см. git-filter-repo или BFG Repo-Cleaner для очистки истории).
Шпаргалка команд
# Полный сброс индекса
git rm -r --cached .
git reset .
git add .
git commit -am 'Reset the entire repository cache.'
# Удалить один файл из индекса
git rm --cached path/to/file.txt
# Удалить директорию из индекса
git rm -r --cached ./your/directory/here
# Отключить локальный credential helper
git config --local --unset credential.helper
# Завершить сессию credential-cache
git credential-cache exit
# Удалить файл с учётными данными (по желанию)
rm ~/.git-credentials
# Диагностика, какой шаблон игнорирует файл
git check-ignore -v path/to/fileКритерии приёмки
- После выполнения команд
git rm -r --cached .и последующегоgit add .файлы, указанные в .gitignore, не отображаются вgit statusкак новые или изменённые для коммита. - Локальные учётные данные удалены, и при доступе к удалённому репозиторию появляется запрос аутентификации.
Когда описанные методы не подходят
- Если требуется удалить файл из всей истории репозитория (например, секреты), простое
git rm --cachedнедостаточно. Используйте git-filter-repo или BFG для перезаписи истории и последующего форс-пуша (force push) с учётом рисков для совместной работы. - Если репозиторий очень большой, полный
git rm -r --cached .может быть ресурсоёмким. Рассмотрите выборочный сброс по директориям.
Простая методология для устранения проблем с .gitignore
- Проверить шаблоны через
git check-ignore -v. - Если файл уже отслеживается — выполнить
git rm --cachedи закоммитить. - Для массовых проблем — выполнить
git rm -r --cached ., затемgit add .и коммит. - Если в истории есть чувствительные данные — планировать очистку истории и оповестить команду.
1-строчный глоссарий
- Индекс (index): внутренняя структура Git, где хранится информация о том, что будет в следующем коммите.
- Кэш (cache): разговорное название индекса Git.
- credential.helper: настройка Git для хранения учётных данных (токенов/паролей).
Риски и меры смягчения
- Риск: удаление из индекса изменит набор файлов в следующем коммите.
- Мягчение: проверяйте
git statusи делайте небольшие коммиты с понятными сообщениями.
- Мягчение: проверяйте
- Риск: удаление учётных данных приведёт к временной недоступности автоматических CI зада.
- Мягчение: уведомите команду, обновите секреты/токены и проверьте CI после очистки.
Image credit: Gabriel Heinzer via Unsplash. Все изменения и скриншоты — Ramces Red.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента