gitrollbackundogit-revertgit-amend

What are the differences between 'revert', 'amend,' 'rollback', and 'undo' a commit?


To help in my knowledge of git so I can use it day to day, what is the difference between:

What are they and what do they do?


Solution

  • The terms revert and amend have a well-defined meaning in Git. In contrast, rollback and undo do not have such a well-defined meaning, and are open to interpretation.

    Reverting a commit...

    ...means creating (on the current branch) a new commit that applies the inverse changes that another commit introduced. It's the preferred approach for correcting a problem in a repo that has already been shared with others, because it doesn't involve any destruction (i.e. rewriting history).

    To revert a commit identified by <commit>, simply run

    git revert <commit>
    

    Amending a commit...

    ...means replacing the "current" commit by a new one that has the same parent(s); more details in How does git commit --amend work, exactly?

    enter image description here

    Be aware that

    To amend a commit, make all the required changes and stage them, then run

    git commit --amend
    

    No need to specify any commit, here, because the last commit on the current branch is the one that will be amended. Your editor will then pop up, giving you the opportunity to modify the commit message.

    Rolling back...

    ...usually means discarding (or stashing) any local changes and resetting the branch to a commit (or simply checking out a commit, but that puts you in detached-HEAD state) prior to commit one where things started to get messed up. Use

    git reset <commit-before-things-started-to-go-belly-up>
    

    Undo a commit...

    ...can mean, depending on the context,