How to uncommit my last commit in git

This question already has an answer here:

  • How to undo the last commits in Git?

    69 answers

  • How to Tell if Pull Request Has Been Merged
  • Heroku - Fatal error when pushing to a git repository
  • Why does 'git status' show binary file as modified when it's not and file modes are the same
  • Get original commit info from Merged commit
  • Unable to merge branch in in-house TFS GIT from Visual Studio 2013
  • git pre-push: connection closed by remote host while running tests
  • Read the git commit count from file
  • How to get Read+Write access to github via plink?
  • What does the caret (^) character mean?
  • How to use Gitorious with QtCreator?
  • Can I ignore directories from within submodule before submodule update?
  • Preventing Git Remote branches from being deleted
  • 8 Solutions collect form web for “How to uncommit my last commit in git”

    If you aren’t totally sure what you mean by “uncommit” and don’t know if you want to use git reset, please see “Revert to a previous Git commit”.

    If you’re trying to understand git reset better, please see “Can you explain what “git reset” does in plain English?”.


    If you know you want to use git reset, it still depends what you mean by “uncommit”. If all you want to do is undo the act of committing, leaving everything else intact, use:

    git reset --soft HEAD^
    

    If you want to undo the act of committing and everything you’d staged, but leave the work tree (your files intact):

    git reset HEAD^
    

    And if you actually want to completely undo it, throwing away all uncommitted changes, resetting everything to the previous commit (as the original question asked):

    git reset --hard HEAD^
    

    The original question also asked it’s HEAD^ not HEAD. HEAD refers to the current commit – generally, the tip of the currently checked-out branch. The ^ is a notation which can be attached to any commit specifier, and means “the commit before”. So, HEAD^ is the commit before the current one, just as master^ is the commit before the tip of the master branch.

    Here’s the portion of the git-rev-parse documentation describing all of the ways to specify commits (^ is just a basic one among many).

    To keep the changes from the commit you want to undo

    git reset --soft HEAD^
    

    To destroy the changes from the commit you want to undo

    git reset --hard HEAD^
    

    You can also say

    git reset --soft HEAD~2
    

    to go back 2 commits.

    Edit: As charsi mentioned, if you are on Windows you will need to put HEAD or commit hash in quotes.

    git reset --soft "HEAD^"
    git reset --soft "asdf"
    

    It’s the latter.

    git reset --hard HEAD^, if you want to also throw away the changes you made. git reset --soft HEAD^ will keep the modified changes in your working tree.

    Be careful, reset --hard will remove your local (uncommitted) modifications, too.

    git reset --hard HEAD^
    

    note: if you’re on windows you’ll need to quote the HEAD^ so

    git reset --hard "HEAD^"
    

    Just a note – if you’re using ZSH and see the error

    zsh: no matches found: HEAD^
    

    You need to escape the ^

    git reset --soft HEAD\^
    

    If you haven’t pushed your changes yet use git reset --soft [Hash for one commit] to rollback to a specific commit. --soft tells git to keep the changes being rolled back (i.e., mark the files as modified). --hard tells git to delete the changes being rolled back.

    If you commit to the wrong branch

    While on the wrong branch:

    1. git log -2 gives you hashes of 2 last commits, lets say $prev and $last
    2. git checkout $prev checkout correct commit
    3. git checkout -b new-feature-branch creates a new branch for feature
    4. git cherry-pick $last patches a branch with your changes

    Then you can follow one the methods suggested above to remove your commit from the first branch.

    Be careful with that.

    But you can use the rebase command

    git rebase -i HEAD~2
    

    A vi will open and all you have to do is delete the line with the commit. Also can read instructions that was shown in proper edition @ vi, a couple of things can be performed on this mode

    Git Baby is a git and github fan, let's start git clone.