Comment annuler plusieurs commits dans le cadre d'un seul commit
Ce n'est pas un problème majeur, juste quelque chose que je veux savoir si c'est possible ou non.
Disons que nous avons deux commits, abcd123
et wxyz789
, qui se produisent à des endroits non adjacents et séparés, loin de l'histoire d'un repo. Maintenant, disons que nous voulons les annuler. Faire
git revert abcd123 wxyz789
Entraînerait deux des livraisons séparées, l'une revenant abcd123
et l'autre de revenir wxyz789
.
Tout va bien, mais que se passe-t-il si les erreurs que nous voulons corriger dans les deux commits sont logiquement lié, et à des fins d'auto-documentation, nous aimerions faire un seul commit contenant un seul" j'ai cassé quelque chose alors maintenant je retourne les fichiers x, Y et z " commentaire? Est-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 pousse. C'est douloureux pour toutes les raisons obscures.)
3 réponses
Vous pouvez faire:
git revert abcd123
git revert --no-commit wxyz789
git commit --amend
... puis écrivez un message de validation approprié décrivant l'effet combiné de la restauration des deux validations.
En cas de reverts compliqués, qui se modifient, le revert --no-commit
peut être problématique.
Ma solution simple était de faire un vrai revert, et le squash:
git revert <all commits>
git rebase -i
Puis marquez tous les reverts comme squash
, sauf le premier, pour créer un seul commit.
git revert -n <commits>
git commit
La première commande fera tous les reverts 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.