If you want to revert commit range B to D (at least in git version 2) in a single commit, you can do
git revert -n B^..D
This revert the changes done by commits from B's parent commit (excluded) to the D commit (included), but doesn't create any commit with the reverted changes. The revert only modifies the working tree and the index.
Don't forgot to commit the changes after
git commit -m "revert commit range B to D"
You can also revert multiple unrelated commits in a single commit, using same method. for example to revert B and D but not C
git revert -n B D
git commit -m "Revert commits B and D"
Reference: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Thanks Honza Haering for the correction