web-dev-qa-db-fra.com

git revert --no-commit sans mise en scène

Habituellement, la commande git revert crée automatiquement des validations avec des messages de journal de validation indiquant quelles validations ont été annulées.

Pour éviter la validation automatique, il y a l'option -n (ou --no-commit).

Mais après cette commande, les fichiers rétablis se trouvent dans la zone intermédiaire. Je peux les déchaîner en utilisant la commande git reset HEAD.

Existe-t-il un moyen direct d'annuler un commit sans commettre et mettre en scène?

En d'autres termes: existe-t-il une commande directe pour annuler une validation en appliquant les modifications uniquement au répertoire de travail, sans toucher à l'index?

38
lornova

Il n'y a pas de commande unique pour cela. Comme vous l'avez déjà noté, vous pouvez combiner git revert -n Avec git reset Pour annuler la réversion dans l'index.

Outre cette méthode, vous pouvez utiliser git apply -R Pour "appliquer inversement" un correctif, et vous pouvez transformer un commit en correctif avec git show, Donc:

$ git show <rev> | git apply -R

a le même effet, avec une différence importante (mais subtile). Permettez-moi de citer la documentation git revert Et d'ajouter ma propre emphase:

-n, --no-commit
Habituellement, la commande crée automatiquement des validations avec des messages de journal de validation indiquant quelles validations ont été annulées. Cet indicateur applique les modifications nécessaires pour rétablir les validations nommées dans votre arborescence de travail et l'index, mais n'effectue pas les validations. De plus, lorsque cette option est utilisée, votre index n'a pas à correspondre à la validation HEAD. La restauration est effectuée par rapport à l'état de début de votre index.

En d'autres termes, git revert -n fonctionne dans et sur l'index , avec pour effet secondaire de mettre à jour votre arbre de travail. La commande git apply Fonctionne (par défaut de toute façon) sur l'arbre de travail uniquement, et peut en fait être utilisée en dehors d'un référentiel git.

40
torek