L'affiche originale indique:
La meilleure réponse que quelqu'un pourrait me donner était d'utiliser git revert
X fois jusqu'à ce que j'atteigne le commit souhaité.
Alors disons que je veux revenir à un commit qui a 20 ans, je devrais l'exécuter 20 fois.
Existe-t-il un moyen plus simple de procéder?
Je ne peux pas utiliser la réinitialisation car ce dépôt est public.
Il n'est pas nécessaire d'utiliser git revert
X fois. git revert
peut accepter une plage de validation comme argument, vous n'avez donc besoin de l'utiliser qu'une seule fois pour rétablir une plage de validations. Par exemple, si vous souhaitez annuler les 20 derniers commits:
git revert --no-edit HEAD~20..
La plage de validation HEAD~20..
est abrégée HEAD~20..HEAD
et signifie «commencer à partir du 20 e parent de la validation HEAD, et rétablir toutes les validations suivantes jusqu'à HEAD».
Cela ramènera les 20 derniers commits, en supposant qu'aucun d'entre eux ne soit un commit de fusion. S'il y a des validations de fusion, vous ne pouvez pas toutes les annuler en une seule commande, vous devrez les annuler individuellement avec
git revert -m 1 <merge-commit>
Notez également que j'ai testé en utilisant une plage avec git revert
git version 1.9.0. Si vous utilisez une ancienne version de git, l'utilisation d'une plage avec git revert
peut ou peut ne pas fonctionner.
Dans ce cas, git revert
est préférable à git checkout
.
Notez que contrairement à cette réponse qui dit d'utilisergit checkout
, git revert
supprimera en fait tous les fichiers qui ont été ajoutés dans l'un des commits que vous annulez , ce qui en fait la bonne façon d'annuler une gamme de révisions.
Documentation