Magit - Annuler le dernier commit - Manipulation de l'historique

12

Cette question StackOverflow propose les meilleures solutions / approches pour annuler les derniers validations.

J'ai commencé à utiliser Magit il y a quelques semaines et après avoir parcouru toute sa documentation, je n'ai toujours pas de moyen définitif / meilleur pour annuler un changement commis par erreur.

Par exemple:
Pour annuler et refaire le dernier commit, nous pouvons utiliser:

$ git commit -m "Something terribly misguided"
$ git reset HEAD~
<< edit files as necessary >>
$ git add ... 
$ git commit -c ORIG_HEAD # To keep the same commit message

Quel devrait être le meilleur flux de travail pour reproduire cette procédure à l'aide de Magit ?

Alexandro de Oliveira
la source

Réponses:

17

Vous pouvez utiliser magit-reset(lié par défaut à x). La validation au point sera utilisée par défaut pour l'invite, mais vous pouvez entrer n'importe quelle valeur de révision que vous souhaitez ("HEAD ~" ici).

Les commandes de réinitialisation sont décrites dans la section "Réinitialisation" du manuel: https://magit.vc/manual/magit/Resetting.html

Pour réutiliser le message de validation, vous pouvez utiliser l' =Coption dans la fenêtre de validation. Malheureusement, l'invite n'offre actuellement aucune valeur d'achèvement (je pense qu'elle devrait probablement au moins offrir ORIG_HEAD), mais avant de réinitialiser, vous pouvez mettre le hachage du commit actuel dans le kill ring (par exemple, avec C-wsur la ligne "Head:" du tampon d'état), puis, après la réinitialisation, le retirer comme valeur pour l' =Coption.


Quelques commentaires supplémentaires:

  • Au lieu d'utiliser =C, vous trouverez peut-être plus pratique de démarrer commit ( cc) puis d'utiliser git-commit-prev-message ( M-p) pour parcourir les messages précédents.

  • Si vous ne modifiez que le dernier commit, vous pouvez ajouter des modifications par étapes au commit précédent avec magit-commit-amend ( ca) ou magit-commit-extend( ce). (Ce dernier réutilise le message de validation, en contournant le tampon COMMIT_EDITMSG.)

Kyle Meyer
la source