Полностью удалить файл из целого хранилища git

Используя git для проекта, я случайно добавил в commit большой файл .zip. Я не заметил, пока не начал загружать его в github. Когда я заметил, я нажал ctrl-c, git remove, git commit и загрузил его снова (теперь с файлом без следа).

Я знаю, что это был неправильный выбор, потому что как только я совершил .zip, он остается в репо, пока я не вернусь к фиксации, но, к сожалению, я этого не сделал.

Теперь, когда кто-то пытается загрузить из репо, для этого требуется много времени, иногда дает git the remote end hung up unexpectedly (который я прочитал, можно решить, выполнив несколько git config) и очень раздражает.

Моя точка зрения: есть способ рассказать дальнейший запрос pull/fetch, который забудет этот конкретный файл в этой конкретной версии фиксации?

Ответ 1

Github предоставляет полезную справочную страницу об удалении файлов. Есть также другие вопросы по StackOverflow, которые охватывают этот

См. также этот раздел в книге Pro Git, приведенный здесь пример:

Чтобы удалить файл с именем passwords.txt из всей истории, вы можете используйте опцию -tree-filter для фильтрации-ветки:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

После очистки вы также можете попробовать git gc для дальнейшего сжатия и очистки для репозитория.