Explicação do nosso instrutor @Jonilson Sousa
Como fala na alternativa correta, com git checkout -- [file] nós desfazemos uma alteração que ainda não foi adicionada ao stage, ou seja, antes do git add.
Já o git restore [file] restaura arquivos da árvore de trabalho ao um ponto especifico, por exemplo, digamos que tenhamos feito algumas mudanças em um arquivo mas vimos que não deveriamos ter feito, então podemos usar o restore para restaurar o arquivo e deixá-lo igual ao último commit.
Já sobre o comando git reset HEAD [file] apenas remove o arquivo do stage ou seja, se alterar algum arquivo e executar o comando git add file esse arquivo já deve entrar no próximo commit, porém se executarmos o git reset HEAD file ele vai apenas apontar o HEAD para o último commit, e então remover o arquivo (file) da área de stage.
Agora o comando git restore --staged [file] também faz o mesmo que o reset, ele apenas vai fazer com que o HEAD aponte para o último commit, ou seja vai remover o arquivo com mudanças da área de stage. O Git tem muito isso, ter comando que fazem várias coisas, assim podemos fazer uma mesma coisa usando comando diferentes, e podendo escolher o que melhor agrada.