web-dev-qa-db-fra.com

Comment annuler plusieurs validations dans le cadre d'une même validation

Ce n'est pas un problème majeur, je veux juste savoir si c'est possible ou non.

Disons que nous avons deux commits, abcd123 et wxyz789, qui se produisent à des endroits séparés non adjacents, très loin dans l'histoire d'un dépôt. Disons maintenant que nous voulons les annuler. Faire

git revert abcd123 wxyz789

entraînerait deux validations distinctes, une annulant abcd123 et l'autre revenant wxyz789.

C'est très bien, mais que se passe-t-il si les erreurs que nous voulons corriger dans les deux commits sont logiquement liées, et à des fins d'auto-documentation, nous aimerions faire un seul commit contenant un seul "I cassé quelque chose alors maintenant je reviens aux fichiers x, y et z "commentaire? Existe-t-il une commande git qui fait cela?

(Je suis bien sûr conscient qu'il est possible de créer un commit où je corrige manuellement toutes les modifications, puis Push. C'est douloureux pour toutes les raisons évidentes.)

55
JimmidyJoo

Tu peux faire:

git revert abcd123
git revert --no-commit wxyz789
git commit --amend

... puis rédigez un message de validation approprié décrivant l'effet combiné de l'annulation des deux validations.

71
Mark Longair

En cas de retours compliqués, qui changent les uns les autres, le revert --no-commit pourrait être problématique.

Ma solution simple était de faire du vrai retour, et du squash:

git revert <all commits>
git rebase -i

Et puis marquez toutes les restaurations comme squash, sauf la première, pour créer un seul commit.

37
ElyashivLavi
git revert -n <commits>
git commit

La première commande fera toutes les restaurations sans créer de commits et mettra en scène le résultat final (l'option -n). Après cela, la commande commit crée un seul commit.

22
lyu