Git удалить файл из всех коммитов

Я допустил "маленькую" ошибку и добавил "маленький" (>100 МБ) файл в локальный репозиторий.

Через два коммита я пытаюсь перейти на удаленное репо в github с лимитом 100 МБ.

Я могу удалить файл из моего текущего коммита с git rm --cached, но это все еще в предыдущих коммитах.

Как я могу удалить файл из всех коммитов? Я пробовал этот ответ о git filter-branch, но у меня не работает.

3 ответа

Решение

Вы можете изменить последние 3 коммитов путем интерактивной перебазировки.

git rebase -i HEAD~3

И измените коммит на "редактировать".

Смотрите https://help.github.com/articles/about-git-rebase/

По поводу наблюдения:

Я пробовал этот ответ о 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 новый коммит.

Думаю, это не совсем идеально, но решает проблему, потому что вы еще не сделали слишком много дополнительных коммитов.

Другие вопросы по тегам