Иногда приходится полностью сбросить историю репозитория - когда по ошибке запушили секреты, огромные файлы, или просто нужна чистая история.
В этом коротком HowTo мы рассмотрим один из вариантов очистки истории Git-репозитория.
🖐️Эй!
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.
Также в блоге теперь доступно соавторство 🐧🐧🐧.
Суть метода
Для этой цели воспользуемся orphan-веткой, у которой нет родителя в истории. Создаём её с текущим состоянием файлов, удаляем старую историю, переименовываем в main и пушим force.
Ситуация: мы закомитили в репозиторий то, чего там быть недолжно 😨:

Или просто захламили историю проекта:

Очистка истории комитов
В “проблемном” репозитории создаём новую ветку без истории, добавляем всё текущее содержимое и коммитим:
git rm --cached .env
echo .env >> ./.gitignore
git checkout --orphan new-branch
git add -A
git commit -m "Initial commit"Удаляем старую ветку и переименовываем новую в main (или master, если используете её):
git branch -D main
git branch -m main
Отправляем в удалённый репозиторий с флагом force (внимание: это перепишет историю на origin):
git push -f origin main

⚠️ Force-push перепишет историю на сервере. Убедись, что никто другой не работает с этим репо в этот момент, иначе у людей сломаются их локальные клоны. Если репо shared - скоординируйся с командой перед этим.
☝️ Все колеги, работающие с этим репо, после force-push должны будут сделать git fetch origin && git reset --hard origin/main (или просто заново склонировать).
Послесловие
Метод жёсткий, но рабочий 😌. Если нужна более аккуратная очистка (например, удалить только определённые коммиты или большие файлы), смотрите в сторону git filter-branch или git-filter-repo - они медленнее, но гибче.
Спасибо, что читаете. Успехов! 🐧
Полезные материалы
- git-checkout orphan - официальная документация;
- newren/git-filter-repo - альтернатива для точечной очистки.
👨💻Ну и…
Не забывайте про нашу телегу📱и чат 💬
Или может хотите стать соавтором? Тогда клик сюда🔗
Всех благ✌️
That should be it. If not, check the logs 🙂


