Comment puis-je annuler une plage de commits dans git? En regardant la documentation 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 B-D
où le résultat serait:
A -> B -> C -> D -> E -> F -> HEAD
où F contient l'inverse de B-D inclus.
Quelle version de Git utilisez-vous?
La restauration de plusieurs validations n'est prise en charge que dans Git1.7.2 +: voir " revenir à une ancienne validation en utilisant plusieurs fois la restauration. " pour plus de détails.
Le courant git revert
page de manuel est uniquement pour la version actuelle Git (1.7.4+).
Comme le rapporte OP Alex Spurling dans les commentaires:
La mise à niveau vers 1.7.4 fonctionne bien.
Pour répondre à ma propre question, voici la syntaxe que je cherchais:
git revert B^..D
B^
signifie "le premier commit parent de B": cela permet d'inclure B
dans le retour.
Voir " git rev-parse
SECTION SPÉCIFICATION DES RÉVISIONS "qui inclut le <rev>^
, par exemple. HEAD^
syntaxe: voir plus sur " Qu'est-ce que le curseur (^
) signifie le caractère? ")
Notez que chaque commit annulé est validé séparément.
Henrik N clarifie dans les commentaires :
git revert OLDER_COMMIT^..NEWER_COMMIT
Comme indiqué ci-dessous, vous pouvez annuler sans vous engager 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 commit B à D (au moins dans git version 2) en un seul commit, vous pouvez le faire
git revert -n B^..D
Cela annule les modifications effectuées par les validations du commit parent B (exclu) au commit D (inclus), mais ne crée aucun commit avec les modifications annulées. Le retour modifie uniquement l'arborescence de travail et l'index.
N'oubliez pas de valider les modifications après
git commit -m "revert commit range B to D"
Vous pouvez également annuler plusieurs validations non liées en une seule validation, en utilisant la même méthode. par exemple pour inverser B et D mais pas C
git revert -n B D
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 le 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 git 1.7.9.6
.
Utilisation git rebase -i
pour écraser les commits concernés en un seul. Ensuite, vous n'avez qu'un seul commit à annuler.