I have a commits in my git history
1.commit 4930da17d8dd23d650ed38435d8b421816a0c451
Date: Sat Dec 5 14:34:18 2015 +0530
2.commit e1ebbbb599ee20ebec3ca92c26266d9fd16e7ccc
Date: Sat Dec 5 13:22:20 2015 +0530
3.commit 1c4a11a80eb054d24dafec2efed0b0282188e687
Date: Sat Dec 5 12:11:50 2015 +0530
4.commit b4ab3c164a3a8d93e0a71a94b5c561cb5e20ebf6
Date: Sat Dec 5 12:09:56 2015 +0530
5.commit 167b1d10258381f09663ce61fa88ce3bbcd404c4
Date: Sat Dec 5 12:09:21 2015 +0530
6.commit c61bcadac673e1c83f4c14b66d56e23b12fa3198
Date: Sat Dec 5 12:07:58 2015 +0530
In that 3rd and 4th commit contains a wrong code, but unknowingly I committed and pushed.
3.commit 1c4a11a80eb054d24dafec2efed0b0282188e687
Date: Sat Dec 5 12:11:50 2015 +0530
4.commit b4ab3c164a3a8d93e0a71a94b5c561cb5e20ebf6
Date: Sat Dec 5 12:09:56 2015 +0530
But 5th and 6th commits contains a correct code. I need this commit to work.
5.commit 167b1d10258381f09663ce61fa88ce3bbcd404c4
Date: Sat Dec 5 12:09:21 2015 +0530
6.commit c61bcadac673e1c83f4c14b66d56e23b12fa3198
Date: Sat Dec 5 12:07:58 2015 +0530
Now I want to Delete and Remove completely whatever I changed in 3rd and 4th commit.
I want delete 3rd and 4th commit from the git history. But not 5th and 6th.
So that my branch will be safe.
You can use
interactive rebase
in order to go back in your commit history and do things differently. For using interactive rebase, just:<commit_id>
is the parent of the last commit you want to edit. After executing this command, just putd
ordrop
in front of commits you're gonna delete or even delete the line corresponding to that commit.Running this command gives you a list of commits in your text editor that looks something like this:
The interactive rebase gives you a script that it’s going to run. It will start at the commit you specify on the command line and replay the changes introduced in each of these commits from top to bottom. It lists the oldest at the top, rather than the newest, because that’s the first one it will replay.
But since you've pushed the branch to your upstream repository, do communicate this history rewrite to your possible colleagues, as the git documentation says:
You can interactively rewrite history with git rebase -i:
Will open your editor and allow you to either squash multiple commits into one, or completely remove them from history (by deleting the line for those commits in your editor.) The ~6 means rewrite the last 6 commits, the -i means do it interactively. In your case, you'll want to remove the lines that say "pick 1c4a11a" and "pick b4ab3c".
Note that the most recent commit in the editor that gets launched is the last line, not the first one, and since you're rewriting history and you've already pushed, you'll also have to "git push --force", not just "git push" in order to send your changes upstream.