Comment puis-je annuler une série de commits dans git? En regardant la documentation de gitrevisions , je ne vois pas comment spécifier la plage dont j’ai besoin. Par exemple:
A -> B -> C -> D -> E -> HEAD
Je veux faire l’équivalent de:
git revert BD
où le résultat serait:
A -> B -> C -> D -> E -> F -> HEAD
où F contient l’inverse de BD inclus.
Quelle version de Git utilisez-vous?
Le retour de plusieurs commits n’est pris en charge que dans Git1.7.2 +: voir ” Restauration d’une ancienne validation à l’aide de la fonction de restauration multiple ” pour plus de détails.
La page de manuel actuelle de git revert
concerne uniquement la version actuelle de Git (1.7.4+).
Comme le rapporte Alex Spurling dans les commentaires:
La mise à niveau vers la version 1.7.4 fonctionne correctement.
Pour répondre à ma propre question, voici la syntaxe que je recherchais:
git revert B^..D
B^
signifie “le premier engagement parent de B”: cela permet d’inclure B
dans le retour.
Voir ” git rev-parse
SPECIFYING REVISIONS section ” qui inclut la syntaxe
, par exemple HEAD^
: voir plus à ” Que signifie le caractère caret ( ^
)? “)
Notez que chaque validation annulée est validée séparément.
Henrik N précise dans les commentaires :
git revert OLDER_COMMIT^..NEWER_COMMIT
Comme indiqué ci-dessous, vous pouvez revenir sans commettre immédiatement:
git revert -n OLDER_COMMIT^..NEWER_COMMIT git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
Si vous souhaitez rétablir la plage de validation B à D (au moins dans la version 2 de git) en une seule validation, vous pouvez le faire.
git revert -n B^..D
Cela annule les modifications apscopes par les validations de la validation du parent de B (exclu) par la validation D (incluse), mais ne crée aucun commit avec les modifications annulées. Le retour modifie uniquement l’arbre de travail et l’index.
N’oubliez pas de commettre les modifications après
git commit -m "revert commit range B to D"
Vous pouvez également annuler plusieurs validations sans rapport dans un même envoi, en utilisant la même méthode. par exemple pour inverser B et D mais pas C
git revert -n BD git commit -m "Revert commits B and D"
Référence: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Merci Honza Haering pour la correction
Faire git revert OLDER_COMMIT^..NEWER_COMMIT
n’a pas fonctionné pour moi.
J’ai utilisé git revert -n OLDER_COMMIT^..NEWER_COMMIT
et tout va bien. J’utilise la version 1.7.9.6
git.
Utilisez git rebase -i
pour écraser les commits pertinents en un. Ensuite, il vous suffit de vous engager à revenir.