How do I “reopen” a git commit?

(Note, I’m not looking for the answer git rebase -i)

In mercurial, I can “reopen” a commit by importing it into my patch queue:

  • How should I use git to get a fast feedback cycle?
  • Git failed to push some refs?
  • TortoiseGit-git did not exit cleanly (exit code 1)
  • jenkins git how pull instead of clone?
  • How should I publish artifacts to an artifact repository to assure that I can easily get the right binary?
  • How do I squash all commit history and push into another remote repository?
  • hg qimport tip

    The commit is “open” in the sense that it’s just like before I had committed it, I can revert, do hg diff, hg status, etc. How do I do this in git?

    (Everything I’ve found on the web suggests git rebase -i and then choose edit, but that’s different, because the commit is not “open” in the same way.)

  • How to get Team City to only trigger a build on a Github pull request if it contains changes in a specific folder
  • git maintaining 2 versions of the same project, with different users on each
  • interoperation between mercurial and subversion
  • Git, create local branch (A) from two other branches (B and C) and then merge from A to B without C files
  • Git rebase - commit select in fork-point mode
  • What and where does one potentially lose stuff when git says “forced update”?
  • 4 Solutions collect form web for “How do I “reopen” a git commit?”

    You just need to move your HEAD pointer up without making any changes to your working copy:

    git reset --soft HEAD^

    Reset moves the pointer, and the soft option specifies that it shouldn’t change any of your files. The default is mixed, which will reset your index, and the hard option will actually remove the changes since that commit in your working copy.

    HEAD is a “magic” git pointer that is always pointing to the current ref (i.e. the parent of your working copy). The caret (^) indicates the parent. You can use this repeatedly, e.g. HEAD^^ refers to the parent of the last commit.

    Assuming you haven’t yet pushed to your remote repository, git reset --soft HEAD^ will “reopen” your last commit at the expense of losing your commit message.

    You can achieve the same result using git commit --amend.

    See comparison chart between Hg & Git.

    Scott Chacon has (wonderfully) elaborated about the ‘git reset’ command:
    Do not hesitate to have a look at it.

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