git-rebase remove specific - Delete commits from a branch in Git
If you have not yet pushed the commit anywhere, you can use
git rebase -i to remove that commit. First, find out how far back that commit is (approximately). Then do:
git rebase -i HEAD~N
~N means rebase the last
N commits (
N must be a number, for example
HEAD~10). Then, you can edit the file that Git presents to you to delete the offending commit. On saving that file, Git will then rewrite all the following commits as if the one you deleted didn't exist.
The Git Book has a good section on rebasing with pictures and examples.
Be careful with this though, because if you change something that you have pushed elsewhere, another approach will be needed unless you are planning to do a force push.
I would like to know how to delete a commit.
delete, I mean it is as if I didn't make that commit, and when I do a push in the future, my changes will not push to the remote branch.
I read git help, and I think the command I should use is
git reset --hard HEAD. Is this correct?
I'm appending this answer because I don't see why anyone who has just tried to commit work would want to delete all that work because of some mistake using Git!
If you want to keep your work and just 'undo' that commit command (you caught before pushing to repo):
git reset --soft HEAD~1
Do not use the --hard flag unless you want to destroy your work in progress since the last commit.
If you didn't publish changes, to remove latest commit, you can do
$ git reset --hard HEAD^
(note that this would also remove all uncommitted changes; use with care).
If you already published to-be-deleted commit, use git revert
$ git revert HEAD
If you want to fix up your latest commit, you can undo the commit, and unstage the files in it, by doing:
git reset HEAD~1
This will return your repository to its state before the git add commands that staged the files. Your changes will be in your working directory. HEAD~1 refers to the commit below the current tip of the branch.
If you want to uncommit N commits, but keep the code changes in your working directory:
git reset HEAD~N
If you want to get rid of your latest commit, and do not want to keep the code changes, you can do a "hard" reset.
git reset --hard HEAD~1
Likewise, if you want to discard the last N commits, and do not want to keep the code changes:
git reset --hard HEAD~N
Say we want to remove commits 2 & 4 from the repo.
commit 0 : b3d92c5 commit 1 : 2c6a45b commit 2 : <any_hash> commit 3 : 77b9b82 commit 4 : <any_hash>
Note: You need to have admin rights over the repo since you are using
git checkout b3d92c5Checkout the last usable commit.
git checkout -b repairCreate a new branch to work on.
git cherry-pick 77b9b82Run through commit 3.
git cherry-pick 2c6a45bRun through commit 1.
git checkout masterCheckout master.
git reset --hard b3d92c5Reset master to last usable commit.
git merge repairMerge our new branch onto master.
git push -f origin masterPush master to the remote repo.
To delete in local branch, use
git reset --hard HEAD~1
To delete in a remote branch, use
git push origin HEAD --force
git rebase -i --root'ed my branch, ignorantly thinking I could reword the first commit differing from the master (the GitHub for Windows default view is the comparison to master, hiding it's entirety).
I grew a Silicon Valley beard while 900+ commits loaded themselves into Sublime. Exiting with no changes, I charged my battery then proceeded to shave, as all 900+ individual commits nonchalantly rebased - resetting their commit times to now.
Determined to beat Git and preserve the original times, I deleted this local repository and re-cloned from the remote.
Now it had re-added a most recent unneeded commit to master I wished to remove, so proceeded like so.
Exhausting the options:
I didn't wish to
git revert - it would create an additional commit, giving Git the upper hand.
git reset --hard HEAD did nothing, after checking the
reflog, the last and only
HEAD was the clone - Git wins.
To get the most recent SHA, I checked the remote repository on github.com - minor win.
git reset --hard <SHA> had worked, I updated another branch to master and 1... 2... poof! the commit was back - Git wins.
Checking back out to master, time to try
git rebase -i <SHA>, then remove the line... to no avail, sad to say. "If you remove a line here THAT COMMIT WILL BE LOST". Ah...glossed over new feature troll the n00b in the 2.8.3 release notes.
git rebase -i <SHA> then
d, drop = remove commit.
To verify, I checked out to another branch, and voila - no hiding commit to fetch/pull from the master.
Good day to you.
If you just messed up your last commit (wrong message, forgot to add some changes) and want to fix it before pushing it to a public repo why not use:
git commit --amend -m "New message here"
If you have newly staged changes they'll be combined with the last commit (that you're trying to get rid of) and will replace that commit.
Of course if you amend a commit after you've pushed it, you're rewriting history so if you do that be sure to understand the implications.
You can also pass the '--no-edit' option instead of '-m' if you would prefer to use the previous commit's message.
What I do usually when I commit and push (if anyone pushed his commit this solve the problem):
git reset --hard HEAD~1 git push -f origin
hope this help
Delete the last commit
For example your last commit
git push origin +aa61ab32^:master
Now you want to delete this commit then an Easy way to do this following
First reset the branch to the parent of the current commit
Force-push it to the remote.
git reset HEAD^ --hard git push origin -f
For particular commit, you want to reset is following
git reset bb676878^ --hard git push origin -f
Assuming you have not pushed to the remote repository, you could re-clone the repository. This has been my method of choice a few times.
use git revert https://git-scm.com/docs/git-revert .It will revert all code then you can do next commit.Then head will point to that last commit. reverted commits never delete but it will not affect on you last commit.
Take backup of your code in to temp folder. Following command will reset same as server.
git reset --hard HEAD git clean -f git pull
If you want to keep your changes , and remove recent commits
git reset --soft HEAD^ git pull