Reverter um intervalo de commits no git

Como posso reverter um intervalo de commits no git? Olhando para a documentação das gitrievisões , não consigo ver como especificar o intervalo de que preciso. Por exemplo:

A -> B -> C -> D -> E -> HEAD 

Eu quero fazer o equivalente a:

 git revert BD 

onde o resultado seria:

 A -> B -> C -> D -> E -> F -> HEAD 

onde F contém o reverso de BD inclusive.

    Qual versão do Git você está usando?

    Revertendo múltiplos commits apenas suportados no Git1.7.2 +: veja ” Reverter para um commit antigo usando reverter múltiplas vezes. ” Para mais detalhes.
    A página man atual do git revert é apenas para a versão atual do Git (1.7.4+).


    Como o OP Alex Spurling relata nos comentários:

    Atualizando para 1.7.4 funciona bem.
    Para responder a minha própria pergunta, esta é a syntax que eu estava procurando:

     git revert B^..D 

    B^ significa “a primeira confirmação pai de B”: que permite include B na reversão.
    Consulte a seção ” git rev-parse ESPECIFICANDO REVISÕES “, que inclui a syntax ^ , por exemplo, HEAD^ : veja mais em ” O que significa o caractere circunflexo ( ^ )? “)

    Observe que cada confirmação revertida é confirmada separadamente.

    Henrik N esclarece nos comentários :

     git revert OLDER_COMMIT^..NEWER_COMMIT 

    Como mostrado abaixo, você pode reverter sem se comprometer imediatamente:

     git revert -n OLDER_COMMIT^..NEWER_COMMIT git commit -m "revert OLDER_COMMIT to NEWER_COMMIT" 

    Se você quiser reverter o intervalo de confirmação B para D (pelo menos na versão 2 do git) em um único commit, você pode fazer

      git revert -n B^..D 

    Isso reverte as alterações feitas por commits do commit pai de B (excluído) para o D commit (incluído), mas não cria nenhum commit com as mudanças revertidas. A reversão apenas modifica a tree 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ários commits não relacionados em um único commit, usando o mesmo método. por exemplo, para reverter B e D, mas não C

      git revert -n BD 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

    Fazer o git revert OLDER_COMMIT^..NEWER_COMMIT não funcionou para mim.

    Eu usei git revert -n OLDER_COMMIT^..NEWER_COMMIT e tudo está bem. Estou usando o git versão 1.7.9.6 .

    Use git rebase -i para esmagar os commits relevantes em um. Então você só tem um compromisso para reverter.