Если вы хотите вернуть диапазон фиксации B в D (по крайней мере, в git версии 2) в одном коммите, вы можете сделать
git revert -n B^..D
Это отменит изменения, сделанные коммитами из родительского коммита B (исключено) для коммита D (включено), но не создает коммит с отмененными изменениями.Отмена только изменяет рабочее дерево и индекс.
Не забудьте зафиксировать изменения после
git commit -m "revert commit range B to D"
Вы также можете отменить несколько несвязанных коммитов в одном коммите, используя тот же метод,например, чтобы вернуть B и D, но не C
git revert -n B D
git commit -m "Revert commits B and D"
Ссылка: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Спасибо Хонза Хэринг за коррекцию