---
title: "Git: Interactive Revert"
kind: article
slug: git-interactive-revert
created_at: 2012-09-04
tags:
- git
- protip
---
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][1] 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.
## Interactive add
Now, there's `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.
## Interactive revert
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 `-n` option:
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.
git reset
The key now is to interactively stage the changes you want to revert. You can do this like this:
git add -p
or
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.
git commit
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.
[1]: http://nvie.com/posts/a-successful-git-branching-model/