git reset is repo-wide by default — but you can scope it:
git restore --staged <file> — unstage that one file, leave the working copy alone.
git restore <file> — discard working-copy changes, leave staged ones.
git restore --source=HEAD~3 <file> — bring back the version that file had 3 commits ago.
Older equivalents (still common):
git reset HEAD <file> — same as --staged above.
git checkout -- <file> — same as plain git restore <file>.
git restore is the modern, less-confusing replacement for those two. Use it.