Reset all changes after last commit in git

Question

How can I undo every change made to my directory after the last commit, including deleting added files, resetting modified files, and adding back deleted files?

Answer

First, reset any changes

This will undo any changes you've made to tracked files and restore deleted files:

git reset HEAD --hard

Second, remove new files

This will delete any new files that were added since the last commit:

git clean -fd

Files that are not tracked due to .gitignore are preserved; they will not be removed

Warning: using -x instead of -fd would delete ignored files. You probably don't want to do this.

How does Git handle symbolic links?

git reset --hard HEAD leaves untracked files behind