1 minute read

Проблема: в репозиторий запушились файлы, т.к. не были добавлены в .gitignore

Удалять каждый долго, потому принято решение о полной перезаписи репо. На начальном этапе пойдёт.

1. Создать новую ветку без истории

git checkout --orphan latest_branch
  • Создаёт новую ветку latest_branch без истории (все файлы останутся, но история коммитов — нет).
  • Все файлы будут считаться “новыми” для гита.

2. Добавить все файлы в индекс

git add -A
  • Добавляет все файлы в индекс для следующего коммита.

3. Сделать новый коммит

git commit -m "fresh start"
  • Создаёт первый коммит в новой ветке с текущим состоянием файлов.

4. Переименовать ветку в main

git branch -M main
  • Переименовывает текущую ветку в main (или в ту, которая у тебя основная).

5. Перезаписать ветку main на GitHub

git push -f origin main
  • Заливает новую ветку main на GitHub с полной заменой истории (f — force push).
  • Вся старая история будет удалена из удалённого репозитория.

В результате:

  • На GitHub останется только один коммит с актуальными файлами.
  • Всё, что в .gitignore, не попадёт в новый коммит.
  • Вся старая история будет удалена.

Внимание:

  • После этого другие разработчики должны будут сделать новый клон репозитория!
  • Старые коммиты восстановить будет нельзя.

Нужно ли удалять ветку latest_branch?

Удалять ветку latest_branch не обязательно, потому что после выполнения команды:

git branch -M main

ты переименовываешь ветку latest_branch в main.

Ветка latest_branch больше не существует — она просто сменила имя на main.

Итог:

  • После git branch -M main никакой отдельной ветки latest_branch не остаётся.
  • Удалять её не нужно.

Если вдруг ты не переименовал ветку, а создал новую:

Тогда можно удалить её командой:

git branch -d latest_branch

Но в стандартном сценарии с переименованием — ничего удалять не надо!