Git удалить файл из всех коммитов
Я допустил "маленькую" ошибку и добавил "маленький" (>100 МБ) файл в локальный репозиторий.
Через два коммита я пытаюсь перейти на удаленное репо в github с лимитом 100 МБ.
Я могу удалить файл из моего текущего коммита с git rm --cached
, но это все еще в предыдущих коммитах.
Как я могу удалить файл из всех коммитов? Я пробовал этот ответ о git filter-branch, но у меня не работает.
3 ответа
Вы можете изменить последние 3 коммитов путем интерактивной перебазировки.
git rebase -i HEAD~3
И измените коммит на "редактировать".
По поводу наблюдения:
Я пробовал этот ответ о git filter-branch, но не работает для моего.
Было бы полезно узнать, почему связанный ответ не работает. Оставив это в стороне, я успешно использовал приведенный ниже код несколько раз для достижения одной и той же цели:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch <your-file>" \
--prune-empty --tag-name-filter cat -- --all
Эта команда в целом похожа на то, что обсуждается в ответе, на который ссылается OP. Для ясности стоит добавить, что эта команда обсуждалась в справочной статье 1 Удаление конфиденциальных данных из репозитория GitHub .
1 Похоже, что статья была перемещена, поэтому я дал ссылку на страницу archive.is .
Я бы мягко сбросил 3 последних коммита. Затем удалите "маленький" файл. Затем внесите все изменения в 1 новый коммит.
Думаю, это не совсем идеально, но решает проблему, потому что вы еще не сделали слишком много дополнительных коммитов.