75 votes

Git - supprime les validations avec les changes vides en utilisant filter-branch

Comment puis-je supprimer les commits qui n'ont pas de jeu de modifications en utilisant git filter-branch?

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

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

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

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

70voto

Jefromi Points 127932

Ajoutez simplement sur l' --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 pouvez réécrire le tout avec de l' -- --all au lieu de simplement en HEAD.)

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

49voto

Charles Bailey Points 244082

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X