Reputation:
I'm trying to remove the 2nd commit to a repo. At this point I could just blow away the .git
dir and re-do it, but I'm curious how to do this... I've deleted commits before, but apparently never the 2nd one :)
> git log
commit c39019e4b08497406c53ceb532f99801793205ca
Author: Me
Date: Thu Mar 22 14:02:41 2012 -0700
Initializing registry directories
commit 535dce28f1c68e8af9d22bc653aca426fb7825d8
Author: Me
Date: Tue Jan 31 21:04:13 2012 -0800
First Commit
> git rebase -i HEAD~2
fatal: Needed a single revision
invalid upstream HEAD~2
> git rebase -i HEAD~1
at which point I get in my editor:
pick c39019e Initializing registry directories
# Rebase 535dce2..c39019e onto 535dce2
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Now my problem is that I can't just blow away this 2nd commit since "if you remove everything, the rebase will be aborted"
Upvotes: 5
Views: 4306
Reputation: 43962
In order to remove the topmost commit, use git reset --hard HEAD~
. Rebase is not needed since you are not removing anything in between other commits.
Upvotes: 5
Reputation: 582
You can also do the following:
git rebase -i --root
This will include the root commit in your rebase. You can then choose to fixup
, squash
, or delete that 2nd commit entirely if you desire.
Upvotes: 1
Reputation: 490078
This is already answered (above) but note that in newer git, there is a noop
command you can put in the file. So you can replace the pick
line with noop
:
$ git rebase -i HEAD^
[in editor, change pick line to noop, and write and quit]
".git/rebase-merge/git-rebase-todo" 15L, 492C written
Successfully rebased and updated refs/heads/master.
$
Admittedly this does nothing that git reset
does not do just as easily ... but if you've already started the interactive rebase, and you only realize what you wanted after the fact, the noop
trick is handy.
Upvotes: 1
Reputation: 2260
Why dont you revert your commit?
git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8
or
git revert HEAD~1
Upvotes: 1
Reputation: 301587
If it is the last commit, then you can do:
git reset --hard HEAD~
And if it is not the last commit, you would have had another commit atleast in the rebase list and you can remove the 2nd commit.
Upvotes: 0