Git - Очистка истории комитов
Приветствую!

Иногда приходится полностью сбросить историю репозитория - когда по ошибке запушили секреты, огромные файлы, или просто нужна чистая история.

В этом коротком HowTo мы рассмотрим один из вариантов очистки истории Git-репозитория.

Суть метода

Для этой цели воспользуемся orphan-веткой, у которой нет родителя в истории. Создаём её с текущим состоянием файлов, удаляем старую историю, переименовываем в main и пушим force.

Ситуация: мы закомитили в репозиторий то, чего там быть недолжно 😨:

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

Очистка истории комитов

В “проблемном” репозитории создаём новую ветку без истории, добавляем всё текущее содержимое и коммитим:

BASH
git rm --cached .env
echo .env >> ./.gitignore

git checkout --orphan new-branch
git add -A
git commit -m "Initial commit"
Нажмите, чтобы развернуть и увидеть больше

Удаляем старую ветку и переименовываем новую в main (или master, если используете её):

BASH
git branch -D main
git branch -m main
Нажмите, чтобы развернуть и увидеть больше

Отправляем в удалённый репозиторий с флагом force (внимание: это перепишет историю на origin):

BASH
git push -f origin main
Нажмите, чтобы развернуть и увидеть больше

Послесловие

Метод жёсткий, но рабочий 😌. Если нужна более аккуратная очистка (например, удалить только определённые коммиты или большие файлы), смотрите в сторону git filter-branch или git-filter-repo - они медленнее, но гибче.

Спасибо, что читаете. Успехов! 🐧

Полезные материалы

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/linux/git-ochistka-istorii-komitov/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша