Если случайно закоммитили пароли, токены или большие файлы, просто удалить их из последнего коммита недостаточно - они останутся в истории Git. Сегодня про то, как удалить следы своего косяка 🤒
Разберём два способа очистки истории репозитория:
1️⃣ git filter-branch – старый и медленный метод
2️⃣ BFG Repo-Cleaner – более современный и быстрый
🚮 Удаление данных с помощью git filter-branch
1️⃣ Удалить все следы файла config.yml из истории:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch config.yml" \
--prune-empty --tag-name-filter cat -- --all
2️⃣ Заменить текстовый секрет во всех коммитах:
git filter-branch --tree-filter \
'find . -type f -exec sed -i "s/OLD_SECRET/REDACTED/g" {} +' -- --all
❌ Минусы:
Очень медленно на больших репозиториях
Требует много оперативной памяти
Ошибки могут сломать историю
🚮 Используем BFG Repo-Cleaner (рекомендуемый способ)
1️⃣ Установите BFG:
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
2️⃣ Удалить файл
config.yml из всех коммитов:
java -jar bfg-1.14.0.jar --delete-files config.yml
3️⃣ Очистить репозиторий от всех данных с API_KEY
java -jar bfg-1.14.0.jar --replace-text banned.txt
Файл banned.txt должен содержать список слов, которые нужно удалить.
▪️ Очистить файлы больше 50MB:
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 50M
4️⃣ Финальная зачистка и переписывание истории:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
⤵️ Плюсы BFG:
В разы быстрее, чем filter-branch
Упрощённый синтаксис
Безопаснее для истории
BashTex 📱 #utils