@R0_none
ни ноты без банкноты

Удалил большой файл, а оно всё равно не пушится и жалуется на этот файл, как исправить?

62c5be3a95cbc915247074.png
  • Вопрос задан
  • 383 просмотра
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Мусорный файл нужно удалить из всех коммитов в которых он есть, а не просто из актуального состояния проекта.
• Если файл добавлен в последнем коммите, то просто поправьте этот коммит через команду commit --amend
git rm --cached "r0_code/trainee/Java_Полное_руководство_Герберт_Шилдт,_10_е_издание.pdf"
git commit --amend

• Если файл добавлен в старом коммите, то можно поправить этот коммит через команду rebase --interactive
Как пользоваться командой смотрим в инструкциях к гиту.
Примерно так
При запуске команды git rebase --interactive <коммит>
откроется текстовый редактор с планом пересборки ветки.
• Мы заменяем команду pick на edit в первой строке. Сохраняем и выходим редактора.
• Репозиторий переключается на состояние, когда мы только что добавили ненужный файл в репозиторий.
Значит мы можем просто удалить файл способом, который я указал в выше — правим текущий коммит через --amend
• Затем командой git rebase --continue продолжим пересборку, чтобы гит повторил все последующие коммиты


• Самый простой и надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
git filter-repo --invert-paths --force --path "r0_code/trainee/Java_Полное_руководство_Герберт_Шилдт,_10_е_издание.pdf"

Последний вариант полностью автоматизирован и удалит файл сразу из всех веток.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347
Crazy on performance...
Даже если Вы сделали коммит с удалением большого файла, он все равно остается в истории git, а значит будет заливаться на удаленный репозиторий.

Можно сделать так:
1. Сделать git checkout на коммит перед тем, где был добавлен большой файл
2. Создать от этого коммита новую ветку.
3. Если в коммите, где был добавлен большой файл, были другие изменения, то воспроизвести их (скорее всего вручную, но может кто еще подскажет как это автоматизировать).
4. Сделать git cherry-pick последующих коммитов из старой ветки в новую.
5. Удалить старую ветку и переименовать новую в то как называлась старая.

UPD: по 3 пункту, думаю можно взять diff проблемного коммита, убрать из него добавление большого файла, а затем накатить этот исправленный diff как patch.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы