Por que os comandos para desfazer ações no Git variam conforme o local onde uma alteração está atualmente?
A árvore de trabalho, a área de staging e o histórico de commits são estados distintos, e cada comando atua sobre estados específicos.
O Git tem apenas um estado, portanto todos os comandos para desfazer ações são intercambiáveis.
Todos os comandos para desfazer ações modificam apenas um repositório remoto.
O comportamento de desfazer depende apenas da extensão do arquivo.