Читайте здесь про фильтр-ветку.
Кто-то случайно фиксирует огромный бинарный файл с бездумным добавлением git, и вы хотите удалить его везде. Возможно, вы случайно зафиксировали файл, содержащий пароль, и хотите сделать свой проект открытым исходным кодом. filter-branch - это инструмент, который вы, вероятно, хотите использовать для очистки всей своей истории. Чтобы удалить файл с именем passwords.txt из всей истории, вы можете использовать опцию --tree-filter для filter-branch:
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten
Вы также можете сделать интерактивную перебазирование в свою ветку в тот момент, когда вы зафиксировали эти файлы, и удалить их из этого коммита. Ссылка выше также объясняет это, но в основном:
git rebase -i HEAD~X
позволит вам редактировать последние X коммитов.