Por que não há desfazer / refazer no Git?

Até onde eu sei, quando você quer desfazer algo no Git, precisa encontrar explicitamente o comando para desfazer o que você fez e emiti-lo. Por exemplo, uma maneira entre muitas de desfazer uma confirmação e refazer é seguir o exemplo deaqu,

$ git commit ...
$ git reset --soft HEAD^
$ edit
$ git add ....
$ git commit -c ORIG_HEAD 

Para desfazer uma solicitação, siga as instruções deaqu,

$ git reset --hard

Mas esses comandos não funcionam necessariamente de forma intercambiável. Existe uma razão pela qual o Git não permite comandos simples de desfazer e refazer? Algo a ver com a filosofia por trás disso? Além disso, não tenho muita experiência com outros sistemas de controle de versão, mas algum deles oferece um comando simples de desfazer e refazer?

questionAnswers(4)

yourAnswerToTheQuestion