Иногда, в процессе работы в коммит может ошибочно попасть большой файл. Это значительно увеличивает вес коммита и сказывается на производительности системы. Для решения подобных проблем была создана команда filter-branch — она позволяет редактировать большое количество коммитов одной командой, например: удалять ненужные файлы из истории.
Для удаления файла из истории (всех коммитов от первого и до крайнего) необходимо выполнить команду:
git filter-branch --tree-filter 'rm -f file-name' HEAD
Опция —tree-filter запускает указанную команду (rm -f file-name) для каждого коммита в истории, после чего сохраняет результат выполнения. В этом случае команда filter-branch отредактирует каждый коммит, в котором «засветился» (от коммита в котором был создан и до крайнего, на который указывает .HEAD) искомый файл. Если вы знаете коммит, в котором был создан не желаемый файл, вы можете ускорить процесс, указав .Git промежуток истории нуждающийся в редактировании. Для этого необходимо заменить опцию HEAD на 35dsa2..HEAD, где 35dsa2 — коммит предшествующий тому, в котором был создан файл.
git filter-branch --tree-filter 'rm -f file-name' ..HEAD
Подробнее о команде можно почитать на этой страничке документации.