Difference between git rm, git restore and git reset

Hi All, I am not sure that I understand the difference between:

a) git rm notes.txt --cached # (my understanding is it is the exact opposite of git add)
b) git restore notes.txt # how is this different from (a)
c) git reset # what does this do and how is this different from (a) and (b)
d) is there a way to uncommit a file

Thanks for the answers in advance.

@soumukhe

The git rm command allows you to remove a file from a Git repository and your working directory. If you only want to remove a file from your Git repository and not your local working copy of a project, you can use the –cached flag.