Se você deseja reverter o intervalo de confirmação B para D (pelo menos na versão 2 do git) em uma única confirmação, você pode fazer
git revert -n B^..D
Isso reverte as alterações feitas por confirmações do commit pai de B (excluído) no commit D (incluído), mas não cria nenhum commit com as alterações revertidas. A reversão modifica apenas a árvore de trabalho e o índice.
Não se esqueça de confirmar as alterações depois
git commit -m "revert commit range B to D"
Você também pode reverter várias confirmações não relacionadas em uma única confirmação, usando o mesmo método. por exemplo, para reverter B e D, mas não C
git revert -n B D
git commit -m "Revert commits B and D"
Referência: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Obrigado Honza Haering pela correção