git reset [<mode>] [<commit>]
This form resets the current branch head to <commit> and possibly
updates the index (resetting it to the tree of <commit>) and the
working tree depending on <mode>. If <mode> is omitted, defaults
to --mixed. The <mode> must be one of the following:
soft
Does not touch the index file or the working tree at all (but resets
the head to <commit>, just like all modes do). This leaves all your
changed files "Changes to be committed", as git status would put it.
hard
Resets the index and working tree. Any changes to tracked files in
the working tree since <commit> are discarded.
git revert
Given one or more existing commits, revert the changes that the
related patches introduce, and record some new commits that
record them. This requires your working tree to be clean (no
modifications from the HEAD commit).
Note: *git revert* is used to record some new commits to reverse
the effect of some earlier commits (often only a faulty one). If you
want to throw away all uncommitted changes in your working
directory, you should see [git-reset[1]](https://git-scm.com/docs/git-
reset), particularly the `--hard` option. If you want to extract
specific files as they were in another commit, you should see [git-
checkout[1]](https://git-scm.com/docs/git-checkout), specifically
the `git checkout <commit> -- <filename>` syntax. Take care with
these alternatives as both will discard uncommitted changes in
your working directory.