Restaurer un ancien commit en utilisant plusieurs fois
Je veux revenir à un commit avec git revert afin que je puisse préserver l'histoire. Est-il un moyen plus simple pour faire cela, alors pour exécuter git revert pour chaque livraison de hachage je veux revenir? Est-il un moyen plus rapide pour revenir à partir d'un certain commettre tout le chemin jusqu'à l'autre de commettre de hachage?
Sur la page de man ils affirment que vous pouvez faire quelque chose comme ceci git revert -n master~5..master~2
mais quand j'essaie de le faire, j'obtiens cette erreur: fatal: Cannot find 'master~5..master~2'
source d'informationauteur David
Vous devez vous connecter pour publier un commentaire.
git revert
devrait prendre un commit unique, de sorte que l'erreur est de se plaindre que vous êtes en lui donnant une liste de révisions où il est attendu. (Mise à jour: grâce à Jefromi pour préciser que depuis la 1.7.2,git revert
réellement peuvent prendre de multiples validations.) Je vous suggère trois pistes d'action possibles ci-dessous:De la création de plusieurs de revenir s'engage
Je ne suis pas sûr si vous pouvez le faire en une seule commande, mais si vous savez que
db0bc
est le dernier commit (c'est à dire que vous voulez revenir à chaque commit après) et l'histoire est linéaire, vous pouvez faire:Aller tout droit, retour à l'ancien état, mais encore sur une branche
D'autre part, si vous venez de soins au sujet de l'histoire, vous pouvez toujours faire de la prochaine validation de l'état de l'arbre source de revenir à la dernière bonne commettre
db0bc
sans introduire de revenir s'engage - vous aurez toujours l'histoire qui a été mis en place entre alors et votre nouveau commit, mais sans beaucoup de revenir s'engage entre les deux. Aussi ce n'aurez pas de difficulté si l'histoire est non-linéaire:Créer une nouvelle branche pour la vieille s'engage
Si vous êtes la seule personne à travailler sur le projet, ou vous n'avez pas poussé maître, ou encore vous savez que la réinitialisation de votre branche master ne cause pas de problèmes, vous pouvez prendre une alternative de tactique, et de créer une nouvelle branche à votre position actuelle, puis reset master en arrière, comme décrit à merveille sur github est "l'annulation" de la page. En bref, vous pouvez faire:
Les diagrammes sur la page github de faire de cette belle et claire, je pense.
À mon humble avis le plus naturel de l'approche est de faire (en supposant que vous avez un propre copie de travail):
git reset --hard $lastnicecommit;
git merge -s ours @{1}
et puis
git commit --amend
pour ajouter une description. (Sur les nouvelles versions de gitgit-merge
déjà vous permet de spécifier une description.)(
@{1}
est juste se référant à la validation de votre branche souligné avant de le réinitialiser.)Cela fait une avance rapide changement et documents de l'histoire complètement. Encore les changements introduits dans les commits depuis
$lastnicecommit
de ne pas introduire de changements éventuels.