How to nuke a commit before last commit
Suppose I have 2 branches
dev branch is ahead of
master by 2 commits, and neither of those commits is merged or pushed to any
dev branch looks like this:
dev A - B - C - D - E
Whereas, A is oldest, and E newest commit.
Id like to get to this state:
dev A - B - C - E
Basically I want to nuke the commit before the last commit, as if it never happened. There should be no conflicts either (E does not depend on D’s changes).
Could I use interactive rebase?
One Solution collect form web for “How to nuke a commit before last commit”
I would use the itneractive form of rebase. While on
dev (you need to have clean working copy):
git rebase -i HEAD~~
In your favourite text editor, you get a list of last 2 commits. Just comment/delete the line for the unwanted commit.
HEAD depends on changes introduced by
HEAD~, you could get merge conflicts and after you resolve them, you will loose your previous history (still available through the
reflog, of course). I usually prefer this method.
If you want to conserve your previous history (and the unneeded commit), you should do
git checkout HEAD~~ # go to last good commit git checkout -b new_branch # create a new branch and forget about the original git cherry_pick dev # copy the commit on top of `dev` to `new_branch`
You will still get a conflict, but you won’t be modifying the history of
On the other hand, if the unwanted commit was on
master and you didn’t want to break anybody’s build, you would do
git revert HEAD~