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

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

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

Суть метода

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

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

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

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

Сперва в “проблемном” репозитории убираем отслеживание чувствительных файлов, если это ваш случай и добавляем их в игнорлист:

BASH
git rm --cached .env

echo .env >> ./.gitignore
Нажмите, чтобы развернуть и увидеть больше

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

BASH
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 Горячая клавиша