Иногда приходится полностью сбросить историю репозитория - когда по ошибке запушили секреты, огромные файлы, или просто нужна чистая история.
В этом коротком 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 🙂



Комментарии