Isso depende muito do que você quer dizer com "reverter".
Alternar temporariamente para uma confirmação diferente
Se você quiser voltar temporariamente, brincar e voltar para onde está, tudo o que você precisa fazer é verificar o commit desejado:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
Ou, se você quiser fazer confirmações enquanto estiver lá, vá em frente e faça uma nova ramificação enquanto estiver nisso:
git checkout -b old-state 0d1d7fc32
Para voltar para onde você estava, basta verificar o ramo em que estava novamente. (Se você fez alterações, como sempre ao trocar de ramificação, precisará lidar com elas conforme apropriado. Você pode redefinir para jogá-las fora; você pode esconder, fazer check-out, esconder pop para levá-las com você; pode comprometer para uma filial lá, se você quiser uma filial lá.)
Exclusões definitivas confirmadas não publicadas
Se, por outro lado, você realmente deseja se livrar de tudo o que fez desde então, há duas possibilidades. Primeiro, se você não publicou nenhum desses commits, basta redefinir:
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
Se você errar, você já descartou as alterações locais, mas pode pelo menos voltar para onde estava antes, redefinindo novamente.
Desfazer confirmações publicadas com novas confirmações
Por outro lado, se você publicou o trabalho, provavelmente não deseja redefinir a ramificação, pois isso está reescrevendo efetivamente o histórico. Nesse caso, você poderia realmente reverter os commits. Com o Git, revert tem um significado muito específico: crie um commit com o patch reverso para cancelá-lo. Dessa forma, você não reescreve nenhum histórico.
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
A página de git-revert
manual realmente cobre muito disso em sua descrição. Outro link útil é esta seção do git-scm.com sobre o git-revert .
Se você decidir que não deseja reverter, afinal, você pode reverter a reversão (conforme descrito aqui) ou redefinir para antes da reversão (consulte a seção anterior).
Você também pode encontrar esta resposta útil neste caso:
Como mover o HEAD de volta para um local anterior? (Cabeça destacada)