Revenir à une gamme de commits dans le dépôt git
Comment puis-je revenir à une gamme de commits dans le dépôt git? En regardant le gitrevisions de la documentation, 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 inclusivement.
- Vers la fin de la gitrevisions(page 7), il y a un chapitre intitulé "la SPÉCIFICATION des PLAGES". Comment est-ce que vous voulez différer de ce qui est décrit là?
- Le gitrevisions page suggère que git revert A..D' fais ce que je veux. Cependant, lorsque j'essaie que je reçois l'erreur "fatal: Impossible de trouver 'A..D'"
Vous devez vous connecter pour publier un commentaire.
Quelle version de Git que vous utilisez?
De revenir plusieurs s'engage dans la prise en charge uniquement dans Git1.7.2+: voir "Restauration d'un vieux valider à l'aide de revenir plusieurs fois." pour plus de détails.
L'actuel
git revert
de la page de manuel est seulement pour les actuel de version Git (1.7.4+).Comme le OP Alex Spurling rapports dans les commentaires:
La mise à niveau vers 1.7.4 fonctionne très bien.
Pour répondre à ma propre question, c'est la syntaxe que je recherche:
B^
signifie "le premier parent de commettre de B": qui permet d'inclure desB
dans le revert.Voir "
git rev-parse
en SPÉCIFIANT les RÉVISIONS de l'article" qui comprennent la<tr>^
, par exempleTÊTE^
syntaxe: voir plus à "Quel est le signe (^
) caractère veux dire?")Noter que chaque revenue commettre est déterminé séparément.
Henrik N précise dans les commentaires:
Comme indiqué ci-dessous, vous pouvez revenir sans s'engager tout de suite:
git revert OLDER_COMMIT^..NEWER_COMMIT
^
à une révision paramètre signifie que le premier parent de cet objet commit".Si vous voulez revenir commettre gamme B à D (au moins dans la version git 2) dans un seul commit, vous pouvez le faire
Ce annuler les changements effectués par engage de son parent commit (exclu) à la D commit (inclus), mais ne crée pas de s'engager avec le revenue de changements. Le revert modifie seulement l'arbre de travail et de l'index.
N'oublie pas de valider les modifications après
Vous pouvez aussi revenir plusieurs indépendants s'engage dans un seul commit, en utilisant la même méthode. par exemple de revenir, B et D, mais pas C
Référence: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Grâce Honza Haering pour la correction
git revert -n B..D
ne revient pas commettre B, C et D.git revert -n B^..D
revient B ainsi.git revert -n master~5..master~2
, il dit cinquième dernier commit inclus. Maismaster~5
est en fait 6 dernier commit. Voir révision de sélection dans git docs pour des informations détaillées sur..
notation 🙂Faire
git revert OLDER_COMMIT^..NEWER_COMMIT
ne fonctionne pas pour moi.J'ai utilisé
git revert -n OLDER_COMMIT^..NEWER_COMMIT
et tout est bon. J'utilise git version1.7.9.6
.-n
ou--no-commit
option annuler toutes les modifications à l'ensemble de la gamme dans un seul commit, au lieu de créer un revert de s'engager pour tous s'engager dans la gamme. Le résultat final est le même, comme dans, les mêmes modifications seront annulées. Juste dépend de comment vous voulez que votre historique de git ressembler.Utilisation
git rebase -i
de squash pertinentes s'engage dans une. Ensuite vous avez juste une s'engager à revenir.