Git - удалить коммит с пустым набором изменений с помощью ветки фильтра

Как удалить коммиты, у которых нет изменений, используя git filter-branch?

Я переписал свою историю git, используя:

git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD

это получилось хорошо, но теперь у меня много коммитов с пустым набором изменений. Я хотел бы удалить эти коммиты. Предпочтительно в msysgit.

Rebasing на самом деле не вариант, потому что у меня более 4000 коммитов, а половина из них должна быть удалена.

Ответ 1

Просто добавьте параметр --prune-empty:

git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD

(И, конечно, если у вас есть другие ссылки, вы можете переписать все с помощью -- --all вместо HEAD.)

Обратите внимание, что это не совместимо с --commit-filter; в этом случае У Чарльза Бейли есть ваш ответ.

Ответ 2

Просто посмотрев документацию для filter-branch, вы сможете это сделать:

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD