Practice Undoing

Last updated: January 4, 2023

Amending the last commit

Here is a common scenario: you make a commit, then realize that you forgot to include some changes in that commit; or you aren't happy with the commit message; or both. You can edit your latest commit with the --amend flag:

git commit --amend

This will hide your last commit (as if it had never happened), add the changes in the staging area (if any) to the changes in that last commit, open a text editor showing the message of the last commit (you can keep or edit that message), and create a new commit which replaces your last commit.

So if you only want to change the commit message, run that command with an empty staging area. If you want to add changes to the last commit, stage them, then run the command.

In short, what this does is to replace your last commit with a new commit with the added changes and/or edited message. This prevents having a messy history with commits of the type "add missing file to last commit" or "better message for last commit: bla bla bla". If you made a typo in your last commit message (and if you care about having a nice, clean history), you can fix it easily this way.

Practice

  • Run git log –oneline (notice the hash of the last commit)
  • Edit your last commit message
  • Run git log –oneline again to see that your last commit now has a new hash (so it is a different commit) and a new message

  • Now, make some change in your project (add a file, or edit a file… any change you want)
  • Then add that new change to your last commit without changing the message

Unstaging

You know how to add changes to the staging area. But what if you want to unstage changes? You don't want to loose those changes. But you staged them and then realized that you don't want to include them in your next commit after all.

Here is the command for this:

git restore –staged <file>

Note that Git will remind you about the existence of this command when you run git status and have staged files ready to be committed.

Practice

  • Make changes to one of your existing files
  • Stage that file
  • Run git status and notice Git’s reminder about this command
  • Unstage the changes on that file

Erasing modifications

Now, what if you made changes to a file, then decide that they were no good? You can easily get rid of these edits and restore the file to its last committed version:

git restore <file>

Note that Git will tell you about this command when you run git status and have unstaged changes in tracked files.

Practice

  • Run git status again and notice Git’s reminder about the existence of this command
  • Erase that last change of yours
  • Open your file and notice that your edits are gone

Warning: as you just experienced, this command leads to data loss. \\
Those last edits are gone and unrecoverable. Be very careful when using this!

Comments & questions