Comment faire pour revenir plusieurs s'engage dans le cadre d'un seul commit
Ce n'est pas un problème majeur, juste une chose, je veux savoir si ou non est possible.
Disons que nous avons deux commits, abcd123
et wxyz789
, qui se produisent à des non-adjacentes, les différents lieux, loin en arrière, dans une pension de l'histoire. Maintenant, nous allons dire que nous voulons revenir. Faire
git revert abcd123 wxyz789
entraînerait deux des livraisons séparées, l'une revenant abcd123
et l'autre de revenir wxyz789
.
C'est très bien, mais que faire si les erreurs que nous voulons pour le fixer dans les deux commits sont logiquement liées, et pour l'application de l'auto-documentation, nous aimerions faire un commit unique contenant un seul "je me suis cassé quelque chose, donc maintenant je suis rétablissement des 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 viens de corriger manuellement toutes les modifications et les pousser. C'est douloureux pour tout le obbious raisons).
Vous devez vous connecter pour publier un commentaire.
Que vous pouvez faire:
... et puis écrire un approprié commettre un message décrivant l'effet combiné de revenir à la fois s'engage.
git revert abcd123 wxyz789 --no-commit
git commit
--no-commit
drapeau de tous les commits que vous voulez est revenue, puis validez la suite et d'ajouter un message pour tout le lot.En cas de complications de revient, ce qui modifie les uns des autres, la
revert --no-commit
pourrait être problématique.Ma solution simple a été de faire du vrai, de revenir, et le squash:
Puis marquer tous les revient comme
squash
, à l'exception de la première, de créer un seul commit.--no-commit
. (Et ne pas avoir peur de "ne pas rebase publié" la règle -- aussi longtemps que vous le faites sur votre local ou privé, direction générale, vous pouvez le faire tout.)pick
àreword
(pour la saisie d'un nouveau message de commit) ouedit
(mise en scène, les changements sans commettre). Pour d'autres annulations, vous pouvez utiliserfixup
au lieu desquash
si vous n'avez pas de soins sur les messages de validation.git revert
+git rebase
) il vous suffit de créer quelques modifications locales, et les écraser à un seul de validation. Toutefois, si vous essayez de rebase existant commettre, il va changer l'histoire. Par exemple, essayez d'exécutergit rebase -i origin/master~2
et essayer de changer la déjà fusionné s'engageLa première commande va faire tous les revient sans créer aucune engage et le stade le résultat final (l'option-n). Après cela, la validation de la commande crée un seul commit.