Cela dépend beaucoup de ce que vous entendez par "revenir".
Passer temporairement à un autre commit
Si vous voulez y revenir temporairement, vous amuser, puis revenir là où vous êtes, il vous suffit de vérifier le commit souhaité:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
Ou si vous voulez faire des commits pendant que vous y êtes, allez-y et créez une nouvelle branche pendant que vous y êtes:
git checkout -b old-state 0d1d7fc32
Pour revenir à l'endroit où vous vous trouviez, vérifiez à nouveau la branche dans laquelle vous vous trouviez. (Si vous avez apporté des modifications, comme toujours lorsque vous changez de branche, vous devrez les traiter comme il convient. Vous pouvez réinitialiser pour les jeter; vous pouvez cacher, retirer, cacher la pop pour les emporter avec vous; vous pouvez vous engager à une succursale là-bas si vous voulez une succursale là-bas.)
Supprimer définitivement les validations non publiées
Si, d'autre part, vous voulez vraiment vous débarrasser de tout ce que vous avez fait depuis, il y a deux possibilités. Premièrement, si vous n'avez publié aucun de ces commits, réinitialisez simplement:
# 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.
Si vous vous trompez, vous avez déjà supprimé vos modifications locales, mais vous pouvez au moins revenir à votre position précédente en réinitialisant à nouveau.
Annuler les validations publiées avec de nouvelles validations
D'un autre côté, si vous avez publié le travail, vous ne voudrez probablement pas réinitialiser la branche, car cela réécrit effectivement l'historique. Dans ce cas, vous pouvez en effet annuler les commits. Avec Git, revert a une signification très spécifique: créer un commit avec le patch inverse pour l'annuler. De cette façon, vous ne réécrivez aucun historique.
# 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
La git-revert
page de manuel couvre en fait une grande partie de cela dans sa description. Un autre lien utile est cette section git-scm.com traitant de git-revert .
Si vous décidez que vous ne voulez pas revenir après tout, vous pouvez annuler le retour (comme décrit ici) ou réinitialiser à avant le retour (voir la section précédente).
Vous pouvez également trouver cette réponse utile dans ce cas:
Comment déplacer HEAD vers un emplacement précédent? (Tête détachée)