Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GIT undo a commit that isn't the most recent, rebase all commits since

Tags:

git

git-rebase

Earlier on, I committed some code which at the time seemed like a good idea, but in fact it made things worse. I'd like to remove the change from the history as it is not helpful, and rebase all commits since - they should all merge without issues.

I tried creating a new branch (called newMaster) immediately before the bad commit (with gitx), checking it out and running:

git rebase -i master 

Which AFAICS should have given me a list of the commits on master and the option to merge or not merge them, but instead it said noop, and fast forwarded newMaster to be equal to master.

What is the easiest way to do what I need?

like image 209
rjmunro Avatar asked Dec 28 '09 14:12

rjmunro


People also ask

How do I undo an old commit?

The easiest way to undo the last Git commit is to execute the “git reset” command with the “–soft” option that will preserve changes done to your files. You have to specify the commit to undo which is “HEAD~1” in this case. The last commit will be removed from your Git history.


1 Answers

The easiest way to do what you want is to stay on (or re-checkout) the branch that you want to edit and run something like this.

git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit> 

This will rebase everything since the bad commit onto the bad commit's parent, effectively removing the bad commiit from your current branch's history. Of course you will need to resolve any conflicts if they occur.

like image 57
CB Bailey Avatar answered Oct 08 '22 18:10

CB Bailey