Только учусь пользоваться 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 коммит.
Использовал BFG Repo-Cleaner на свой страх и риск, это помогло в моем случае.
Если у кого-то проблема, как у меня, рассказываю что делал, т.к. делал не совсем по инструкции, т.е. без создания "bare repo".
Запустил Repo-Cleaner с необходимыми ключами прямо в папке проекта, после обработки получил пересобранные коммиты с новыми хэшами. Пуш далее я делать не мог, так как первые 4 коммита в локальном репозитории и в удаленном не совпадали. Нужно было либо делать пул и мерджить, либо, как сделал я - отвязал origin в локальном репозитории и привязал новый (предварительно создав на гитхаб). Далее пуш и я получил новый проект на гитхабе со всей историей коммитов.
Руководитель frontend направления, предприниматель
git rm --cached [filename]
Кстати, если работы не очень много было проделано (не надо сутки сидеть переносить код), то ты можешь через diff сравнить коммиты, выудить разницу (в фай какой-нить) и спокойно откатиться к старому, а потом восстановиться, если что-то пойдет не так.
я не совсем понял, что вы имеете ввиду. в вопросе я указал, что использовал уже git rm <имя_файла>. Если быть точным, то я использовал конкретно команду git rm --cached<имя_файла>, + удалил файл локально вручную.
но пуш все равно не проходит, как я понял из за того, что файл разростается в 6ом коммите, а удаляю я его только в 11ом.
BFG Repo-Cleaner, насколько я понимаю - это для ситуаций, когда косяк 1000 коммитов назад и все это уже куда-то запушили. У вас всего 10 коммитов и, похоже, желание чему-то научиться.
1. Если что-то закоммичено - испортить невозможно (всегда есть возможность восстановить).
2. Видимо вы работаете в ветке master. Создайте ветку test на последнем коммите и делайте с мастером все что угодно - test останется в неизменном виде (всегда можно master перенести обратно в test и начать все сначала).
3. git rebase --interactive <5-й коммит> (затем отмечаете коммиты, которые хотите отредактировать и, либо удаляете вообще данный файл, либо исключаете увеличение).