Skip to main content

Git: Interactive Revert

·263 words·2 mins· ·
Git Protip
Ariejan de Vroom
Author
Ariejan de Vroom
Jack of all Trades, Professional Software Craftsman
Table of Contents

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.

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.

Related

Move your latest commits to a separate branch
·153 words·1 min
Git Protip
Showing Ruby, Rails and git info in your app
·206 words·1 min
Ruby Rails Protip
Removing untracked files and directories with git
·346 words·2 mins
Git