web-dev-qa-db-fra.com

Git - Supprimer les validations avec un ensemble de modifications vide à l'aide de la branche de filtre

Comment puis-je supprimer les validations qui n'ont aucun ensemble de modifications en utilisant git filter-branch?

J'ai réécrit mon historique git en utilisant:

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

cela a bien fonctionné mais maintenant j'ai beaucoup de commits avec des changesets vides. Je voudrais supprimer ces commits. De préférence en msysgit.

Le reconditionnement n'est pas vraiment une option car j'ai plus de 4000 commits et la moitié d'entre eux doivent être supprimés.

75
Paul Pladijs

Ajoutez simplement le --Prune-empty option:

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

(Et bien sûr, si vous avez d'autres références, vous voudrez peut-être tout réécrire avec -- --all au lieu de simplement HEAD.)

Notez que ce n'est pas compatible avec --commit-filter; dans ce cas, Charles Bailey a votre réponse .

70
Cascabel

Je regarde juste la documentation de filter-branch, vous devriez pouvoir faire ceci:

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
49
CB Bailey