L'affiche originale indique:
La meilleure réponse que quelqu'un pourrait me donner était d'utiliser git revertX 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 revertX fois. git revertpeut 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..HEADet 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 revertgit version 1.9.0. Si vous utilisez une ancienne version de git, l'utilisation d'une plage avec git revertpeut ou peut ne pas fonctionner.
Dans ce cas, git revertest 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