Git Succinctly Annulation des modifications

Le souci de conserver des copies "sûres" d'un projet logiciel est une tranquillité d'esprit: en cas de rupture brusque de votre projet, vous saurez que vous avez facilement accès à une version fonctionnelle et vous serez en mesure de localiser précisément le problème. a été présenté. À cette fin, l'enregistrement des commits est inutile sans la possibilité d'annuler les modifications. Cependant, puisque Git a tellement de composants, "annuler" peut prendre différentes significations. Par exemple, vous pouvez:

  • Annuler les modifications dans le répertoire de travail
  • Annuler les modifications dans la zone intermédiaire
  • Annuler un commit entier

Pour compliquer les choses encore plus loin, il y a plusieurs façons d'annuler un commit. Tu peux soit:

  1. Supprimez simplement le commit de l'historique du projet.
  2. Laisser le commit tel quel, en utilisant un nouveau commit pour annuler les modifications introduites par le premier commit.

Git dispose d'un outil dédié à chacune de ces situations. Commençons par le répertoire de travail.


Annuler dans le répertoire de travail

La période de temps qui suit immédiatement la sauvegarde d’une copie sécurisée d’un projet est une grande innovation. Fort de la connaissance que vous êtes libre de faire n'importe quoi vous voulez sans endommager la base de code, vous pouvez expérimenter au contenu de votre coeur. Cependant, cette expérimentation insouciante prend souvent une mauvaise tournure et conduit à un répertoire de travail avec un tas de code hors sujet. Lorsque vous atteignez ce point, vous voudrez probablement exécuter les commandes suivantes:

 réinitialiser git --hard HEAD git clean -f

Cette configuration de git reset fait en sorte que le répertoire de travail et l’étape correspondent aux fichiers de la dernière validation (également appelée TÊTE), effaçant effectivement tous les changements non engagés dans suivi des dossiers. Disposer de non suivi fichiers, vous devez utiliser le git clean commander. Git fait très attention à la suppression du code, vous devez donc également fournir le -F option pour forcer la suppression de ces fichiers.


Réinitialisation de toutes les modifications non validées

Dossiers individuels

Il est également possible de cibler des fichiers individuels. La commande suivante fera en sorte qu'un seul fichier du répertoire de travail corresponde à la version de la dernière validation..

 git checkout HEAD 

Cette commande ne change pas du tout l'historique du projet, vous pouvez donc remplacer en toute sécurité TÊTE avec un ID, une branche ou une balise de validation pour que le fichier corresponde à la version de cette validation. Mais, fais ne pas essayez ceci avec git reset, comme ca volonté changer votre historique (expliqué dans Annulation des validations).


Annuler un fichier avec git checkout

Annulation dans la zone de transit

Lors de la configuration de votre prochain commit, vous ajouterez parfois un fichier supplémentaire à la scène. L'invocation suivante de git reset le déchaînera:

 git reset HEAD 

Omettant le --difficile flag indique à Git de laisser le répertoire de travail seul (opposé à git reset --hard HEAD, qui réinitialise tous les fichiers du répertoire de travail et de l’étape). La version mise en scène du fichier correspond TÊTE, et le répertoire de travail conserve la version modifiée. Comme on pouvait s’y attendre, il en résulte une modification non mise en scène de votre statut git sortie.


Unstaging un fichier avec git reset

Annulation des validations

Il y a deux façons d'annuler un commit en utilisant Git: Vous pouvez soit réinitialiser en le supprimant simplement de l'historique du projet, ou vous pouvez revenir en générant un Nouveau commit qui supprime les modifications introduites dans l'original. Annuler en introduisant un autre commit peut sembler excessif, mais réécrire l'historique en supprimant complètement les commits peut avoir des conséquences désastreuses sur les flux de travail multi-utilisateurs..

Réinitialisation

Le toujours polyvalent git reset peut également être utilisé pour bouge toi la TÊTE référence.

 git reset HEAD ~ 1

le TÊTE ~ 1 paramètre de syntaxe spécifie la validation qui a lieu juste avant TÊTE (également, TÊTE ~ 2 se réfère au deuxième commit avant TÊTE). En déplaçant le TÊTE référence en arrière, vous supprimez effectivement le plus récent commit de l'historique du projet.


En mouvement TÊTE à TÊTE ~ 1 avec git reset

C'est un moyen facile de supprimer deux commits qui ont dévié du sujet, mais cela pose un sérieux problème de collaboration. Si d'autres développeurs avaient commencé à construire en plus du commit que nous avions supprimé, comment se synchroniseraient-ils avec notre référentiel? Ils devraient nous demander l'ID du commit de remplacement, le rechercher manuellement dans votre référentiel, transférer toutes leurs modifications dans ce commit, résoudre les conflits de fusion, puis partager leurs "nouveaux" changements avec tout le monde. encore. Imaginez ce qui se passerait dans un projet open source avec des centaines de contributeurs…

Le point est, ne réinitialise pas les commits publics, mais n'hésitez pas à supprimer les données privées que vous n'avez pas partagées avec qui que ce soit. Nous reviendrons sur ce concept plus tard dans la session..

Revenant

Pour remédier aux problèmes posés par la réinitialisation des commits publics, les développeurs Git ont mis au point un autre moyen d'annuler les commits: le retour. Au lieu de modifier les commits existants, inverser ajoute un Nouveau commit qui annule le problème commit:

 git revert 

Cela prend les modifications dans le commit spécifié, explique comment les annuler et crée un nouveau commit avec le jeu de modifications résultant. Pour Git et les autres utilisateurs, la validation de validation a l'air et agit comme n'importe quelle autre validation. Il annule simplement les modifications introduites par une précédente validation..


Annulation d'un commit avec un commit de retour

C’est le moyen idéal pour annuler les modifications déjà validées dans un référentiel public..

Amendement

En plus d’annuler complètement les commits, vous pouvez aussi modifier la validation la plus récente en organisant les modifications comme d'habitude, puis en exécutant:

 git commit --amend

Ce remplace le commit précédent au lieu d’en créer un nouveau, ce qui est très utile si vous avez oublié d’ajouter un fichier ou deux. Pour votre commodité, l'éditeur de commit est semé avec le message de l'ancien commit. Encore une fois, vous devez Faites attention en utilisant le --modifier drapeau, car il réécrit l'histoire un peu comme git reset.


Modification du dernier commit

Cette leçon représente un chapitre de Git Succinctly, un eBook gratuit de l'équipe de Syncfusion.