Git – supprime les commits avec le changeset vide en utilisant filter-branch

Comment puis-je supprimer les commits qui ne comportent aucun changement en utilisant git filter-branch?

J’ai réécrit mon histoire de 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 modifications vides. Je voudrais supprimer ces commits. De préférence en msysgit.

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

Ajoutez simplement l’option --prune-empty :

 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 .

En regardant simplement la documentation de filter-branch , vous devriez pouvoir faire ceci:

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