GIT. Как полностью удалить файл из истории
Источники: Удаление объектов GIT, Remove sensitive data.
Опишу общую последовательность действий для полного удаления файлов из истории GIT.
Примечание
После удаления из истории GIT всех необходимых файлов и каталогов, сделайте клон проекта заново - так будет надежнее.
Порядок действий:
1. Нужно найти все коммиты, которые изменяли файл:
git log --pretty=oneline --branches -- BIGFILE.ZIP
2.1 Удалить ссылки на файл из всей истории коммитов, начиная с последнего (пусть, хеш последнего коммита - 6df7640):
git filter-branch --index-filter 'git rm --cached BIGFILE.ZIP --ignore-unmatch' --prune-empty --tag-name-filter cat -- --all
2.2 Удалить ссылки на каталог из истории коммитов:
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch BIG/DIR' --prune-empty --tag-name-filter cat -- --all
3. Отправляем изменения на сервер:
git push --force
Полезные команды
git count-objects -v # посмотреть размер репозитория rm -Rf .git/refs/original # удалить ссылки на старые из reflog rm -Rf .git/logs/ # git gc # перепаковать базу git reflog expire --expire=now --all #
git gc --aggressive --prune=now #