Reverting to a specific commit without losing history

Aviv Paz picture Aviv Paz · Sep 29, 2015 · Viewed 11.9k times · Source

I know this type of a question has a lot duplicates, but I wanted to open a new one because I didn't found in all of the other questions the explaination of the best way to do it as I want.

I know i can revert and keep the history by doing:

git reset --soft c14809fa

I want to revert the development branch and keep the history on a different branch.

If I checkout the development to a new branch before I revert the commits - For example

git checkout -b beforeRevert

Than I will checkout back to the development branch and do the reveting ( because I want to continue working on the data from the commits i had revert to )

The other branch, beforeRevert branch, will keep all the history and data of the "before reverting" that will use again someday, but won't include in the current development branch? Or the reverting on the development branch will somehow effects the beforeRevert branch?

Answer

Enrico Campidoglio picture Enrico Campidoglio · Sep 29, 2015

The easiest thing to do, like you say, would be to simply create a new branch where HEAD is and then revert development to the commit you want to resume work from:

git checkout development   # Make HEAD point to the 'development' branch
git branch beforeRevert    # Create a new branch reference pointing to HEAD
git reset --hard c14809fa  # Move HEAD, the index and your working copy to c14809fa

Here's a graphical representation of what will happen:

    Step 1               Step 2                  Step 3

            develop    develop, beforeRevert   develop   beforeRevert
           /                    /             /         /
A-B-C-D-E-F          A-B-C-D-E-F             A-B-C-D-E-F
          ^                    ^             ^
         HEAD                 HEAD          HEAD

The important thing here is that HEAD is always pointing to the development branch, so that's the branch that gets moved when you run git reset --hard c14809fa. The new beforeRevert branch will still point to where HEAD was before the revert.