https://git-scm.com/docs/git-reset
git-reset - Reset current HEAD to the specified state
Aqui a documentação demonstra o que faz o RESET, ele aponta o índice para o commit especificado. Com o parâmetro --soft (padrão), só mexe nos metadados, sem alterar o conteúdo, enquanto que com o parâmetro --hard mexe no conteúdo, apagando ou alterando arquivos se preciso.
Esse comando volta ao ponto desejado, de forma destrutiva, realmente DESFAZENDO os commits, descartando o histórico e opcionalmente alterando o conteúdo até o ponto que estava conforme indicado.
A documentação sugere casos de uso em alguns exemplos, como quando a mensagem do commit ficou errada, ou quando não se deseja manter em histórico o último ou últimos commits, por exemplo.
(vide exemplos na página oficial)
https://git-scm.com/docs/git-revert
git-revert - Revert some existing commits
Nesse caso a documentação mostra que esse comando reverte as mudanças, porém criando um novo commit, que espelha o estado anterior desejado, dessa forma mantendo todo o histórico. Ou seja, não-destrutivo.
(vide exemplos na página oficial)
Nos exemplos da documentação, é usado HEAD como alvo, porém os dois comandos também aceitam o hash do commit, com as devidas diferenças de uso.
Sendo assim, tanto RESET quanto REVERT fazem a desejada viagem no tempo, ou o “desfazer” commit que se pretende, mas têm resultados diferentes, e casos de uso diferentes.
Verificando…
RESET:
REVERT:
O RESET (destrutivo, apaga a história) é útil quando você está trabalhando em repositório local, ou sozinho, e quer apagar commits anteriores, sem deixar rastro. O que não é indicado para quando se está trabalhando de forma colaborativa, em repositórios públicos, em commits já enviados ao repositório remoto, onde é obviamente mais indicado o REVERT (não destrutivo, mantém a história).
A expressão genérica “desfazer commit” pode ser atendida com ambos comandos, a depender do contexto.