Git - удаляет коммиты с пустым набором изменений с помощью filter-branch - PullRequest
74 голосов
/ 16 марта 2011

Как мне удалить коммиты без изменений с помощью git filter-branch?

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

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

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

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

Ответы [ 2 ]

70 голосов
/ 16 марта 2011

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

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

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

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

49 голосов
/ 16 марта 2011

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

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
...