Иногда в процессе разработки возникает ситуация, когда файл или целая директория уже добавлены в репозиторий, но их больше не нужно отслеживать. Например:
- вы по ошибке закоммитили файлы логов или временные данные;
- в проекте появилась папка с кэшем;
- какие-то данные должны оставаться только локально (например, настройки IDE).
В таких случаях важно убрать файл/папку из индекса GIT, но при этом оставить их на диске.
Убрать папку из отслеживания
1 2 |
git rm -r --cached my-folder git commit -m "stop tracking my-folder" |
Разбор команды:
git rm
— удалить из индекса;-r
— рекурсивно по всем вложенным файлам и папкам;--cached
— удалять только из индекса, не трогая файлы в рабочей директории.
После этого папка my-folder
останется на диске, но её содержимое больше не будет отслеживаться GIT.
Убрать все файлы внутри папки, но не саму папку
Иногда нужно оставить сам каталог в репозитории (например, uploads/
или storage/
), но очистить его содержимое.
1 2 |
git rm -r --cached -- 'my-folder/*' git commit -m "stop tracking contents of my-folder" |
--
(две черты) — это специальный разделитель аргументов.
- Он нужен, чтобы GIT понимал, что всё, что идёт после него, — это именно имена файлов/папок, а не опции команды.
- Например, если у вас есть файл с именем
--test.txt
, без этого разделителя GIT подумает, что это флаг. - В нашем случае
--
избыточен, но это рекомендованный приём безопасности, чтобы команды работали одинаково при любом имени пути.
Теперь папка будет пустой в репозитории, но сама директория сохранится.
Убрать отдельный файл из индекса
1 2 |
git rm --cached -- config.php git commit -m "stop tracking config.php" |
Точно также как и с папкой, только без флага -r (рекурсии).
Добавить в .gitignore
После того как вы перестали отслеживать файлы, обязательно добавьте их в .gitignore
, чтобы они снова не попали в коммиты.
Итоговый порядок действий
- Удаляем ненужный файл/папку из индекса (
git rm --cached
). - Делаем коммит с изменением.
- Добавляем путь в
.gitignore
, чтобы GIT больше не пытался отслеживать эти файлы.