Revert a range of commits in git

How can I revert a range of commits in git? From looking at the gitrevisions documentation, I cannot see how to specify the range I need. For example:

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

I want to do the equivalent of:

  • github with Visual Studio 2013 - cannot pull because of uncommitted changes
  • egit with self signed certificate, https
  • Github-like hosting, with private source, public ticketing system
  • How to deploy git-versioned web apps through WebDAV?
  • Fail to use git pull “Couldn't find remote ref xxx”
  • git push after git filter-branch rejected
  • git revert B-D

    where the result would be:

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

    where F contains the reverse of B-D inclusive.

  • Git in PHPstorm: Unstage files from Git
  • How do I enable TEE eclipse plugin on linux to clone a git repository in TFS 2013?
  • Git push: Error: unpack failed: index-pack abnormal exit
  • How to rewrite history so that all changes made within a folder are removed?
  • Git reset hard and going back
  • “Not currently on any branch” after doing a commit
  • 4 Solutions collect form web for “Revert a range of commits in git”

    What version of Git are you using?

    Reverting multiple commits in only supported in Git1.7.2+: see “Rollback to an old commit using revert multiple times.” for more details.
    The current git revert man page is only for the current Git version (1.7.4+).

    As the OP Alex Spurling reports in the comments:

    Upgrading to 1.7.4 works fine.
    To answer my own question, this is the syntax I was looking for:

    git revert B^..D 

    Note that each reverted commit is committed separately.

    Henrik N clarifies in the comments:


    As shown below, you can revert without committing right away:

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

    doing git revert OLDER_COMMIT^..NEWER_COMMIT didn’t work for me, I used git revert -n OLDER_COMMIT^..NEWER_COMMIT and everything good, I’m using git version

    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"


    Thanks Honza Haering for the correction

    Use git rebase -i to squash the relevant commits into one. Then you just have one commit to revert.

    Git Baby is a git and github fan, let's start git clone.