@iPathfinder

Как удалить файл из истории коммитов в GIT?

Только учусь пользоваться GIT.
Есть проект - одна ветка с историей из 10 коммитов, на Github запушены с 1-го по 4-ый. Поскольку работаю с проектом один и в текущий момент с одного компьютера, некоторое время коммитил изменения, но не пушил. Итак HEAD указывает на 10ый коммит.

Попытался запушить на сервер, но получил ошибку - github мне сообщил, что обнаружил большие файлы (более 100мб) и их нельзя загружать. Ок, действительно у меня разросся файл лога, который находился в отслеживаемой папке. Удалил файл в PyCharm через safe-delete, закоммитил, пытаюсь пушить - снова ошибка.
Погуглил, понял, что удалил не так и удалил еще раз через git rm <имя_файла>. Коммит, пуш не проходит - опять ошибка. Смотрю историю и понимаю что файл разросся на 6ом коммите. И насколько я понимаю пуш не проходит именно из за большого файла в 6ом коммите (хотя странно что 5ый коммит тоже не запушился).
Файл этот мне не нужен, я хочу получить на сервере с 1ого по 10ый коммит. Как это можно сделать?

P.S. Нашел на help.github инфу о BFG Repo-Cleaner, но я так понял что его применяют в похожих ситуациях, когда изменения уже запушены на сервер, а в моем случае не пойму можно ли его использовать. Боюсь сломать что нибудь (после этой ошибки у меня почему то Pycharm стал крашиться). Сохранил последнюю версию локально, но хотелось бы не потерять историю изменений с 5 по 10 коммит.
  • Вопрос задан
  • 2758 просмотров
Решения вопроса 1
@iPathfinder Автор вопроса
Использовал BFG Repo-Cleaner на свой страх и риск, это помогло в моем случае.
Если у кого-то проблема, как у меня, рассказываю что делал, т.к. делал не совсем по инструкции, т.е. без создания "bare repo".
Запустил Repo-Cleaner с необходимыми ключами прямо в папке проекта, после обработки получил пересобранные коммиты с новыми хэшами. Пуш далее я делать не мог, так как первые 4 коммита в локальном репозитории и в удаленном не совпадали. Нужно было либо делать пул и мерджить, либо, как сделал я - отвязал origin в локальном репозитории и привязал новый (предварительно создав на гитхаб). Далее пуш и я получил новый проект на гитхабе со всей историей коммитов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ArsenyMatytsyn
@ArsenyMatytsyn
Руководитель frontend направления, предприниматель
git rm --cached [filename]

Кстати, если работы не очень много было проделано (не надо сутки сидеть переносить код), то ты можешь через diff сравнить коммиты, выудить разницу (в фай какой-нить) и спокойно откатиться к старому, а потом восстановиться, если что-то пойдет не так.
Ответ написан
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
BFG Repo-Cleaner, насколько я понимаю - это для ситуаций, когда косяк 1000 коммитов назад и все это уже куда-то запушили. У вас всего 10 коммитов и, похоже, желание чему-то научиться.
1. Если что-то закоммичено - испортить невозможно (всегда есть возможность восстановить).
2. Видимо вы работаете в ветке master. Создайте ветку test на последнем коммите и делайте с мастером все что угодно - test останется в неизменном виде (всегда можно master перенести обратно в test и начать все сначала).
3. git rebase --interactive <5-й коммит> (затем отмечаете коммиты, которые хотите отредактировать и, либо удаляете вообще данный файл, либо исключаете увеличение).

Другие способы избавления от файла: https://itextpdf.com/en/blog/technical-notes/how-c...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы