Git: Interactive Revert
4 September 2012
I recently made a commit in a project that, mistakenly, included changes to
db/schema.rb. My local schema was out of date and this could cause trouble for the others in my team.
Luckily we use a successful git branching model so my changes were still up for review by the team.
The change I made was part of larger commit. But all I wanted was to revert serveral chunks from
db/schema.rb that would cause trouble.
git add -i which allows you to selectively stage chunks for the next commit. Unfortunately, the process for reversing interactively is a bit more complicated, but not much.
Well, let’s say you want to revert changes you made in commit
f1e11c. Go to your feature branch and revert your changes for that commit but do not commit them yet, hence the
git revert -n f1e11c
Your working copy now contains staged changes to revert the entire
f1e11c commit. You don’t want to revert everything, so unstage all those changes.
The key now is to interactively stage the changes you want to revert. You can do this like this:
git add -p
git add -i
Choose whichever suits you.
In my case I staged only the chunks that related to the changes in
db/schema.rb that I wanted to revert.
With your reverting changes staged, commit them.
You’re now left with reverting changes you didn’t want to make. Just throw them away.
git reset --hard
And that’s all. You have now selectively reverted a commit.