Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove an old Git commit from a branch without using a reverse patch? [duplicate]

Tags:

git

git-rebase

I have a master branch like this..

A -- B -- C -- D -- E -- HEAD

Is there any command that remove one of a old commit and retain the others, say commit C?

finally it becomes like this

A -- B -- D -- E -- HEAD

I know that we can use a reverse patch and apply a new commit with reverse patch to remove commit C, but the tree structure will not be so clear and looks bulky, i.e.

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD

Anyone knows?

like image 402
TheOneTeam Avatar asked Jul 20 '11 15:07

TheOneTeam


People also ask

Can we remove specific commit in git?

To undo changes associated with a specific commit, developers should use the git revert command. To undo every change that has happened since a given commit occurred, use git reset.


2 Answers

Use interactive rebase. For example, to go back 5 commits:

git rebase -i HEAD~5

Then in the editor which pops up, delete the line containing the commit you want to remove.

like image 191
Graham Borland Avatar answered Oct 18 '22 18:10

Graham Borland


Interactive rebase works, but to do it with just one command:

git rebase --onto B C

Still see the comments on the "interactive rebase" answer. They apply here, too.

like image 27
Ryan Stewart Avatar answered Oct 18 '22 19:10

Ryan Stewart