Полная перезапись репозитория
Проблема: в репозиторий запушились файлы, т.к. не были добавлены в .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
Но в стандартном сценарии с переименованием — ничего удалять не надо!