File-level reset
When invoked with a file path, git reset updates the staged snapshot to match
the version from the specified commit. For example, this command will fetch the
version of foo.py in the 2nd-to-last commit and stage it for the next commit:
git reset HEAD~2 foo.py
As with the commit-level version of git reset, this is more commonly used with
HEAD rather than an arbitrary commit. Running git reset HEAD foo.py will unstage
foo.py. The changes it contains will still be present in the working directory.
The --soft, --mixed, and --hard flags do not have any effect on the file-level
version of git reset, as the staged snapshot is always updated, and the working
directory is never updated.