Although I use Git pretty often, I'm still a beginner.
Sometimes, I make a mistake but spot it only after I have committed it. At that point, I usually have to spend a long time on the Internet looking for the command I should use to get rid of it (before pushing).
Every time that happens, I find myself wondering what's the difference between the four terms that I usually come across:
I've that it's finally time to learn those differences once and for all. What are they?
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.
...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>
...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?
Be aware that
you can only amend the last commit on a given branch; to rewrite older commits, you need to bring out the big guns (e.g. interactive rebase).
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.
...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>
...can mean, depending on the context,