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:
Pour compliquer les choses encore plus loin, il y a plusieurs façons d'annuler un commit. Tu peux soit:
Git dispose d'un outil dédié à chacune de ces situations. Commençons par 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.
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).
git checkout
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.
git reset
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..
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.
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..
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..
C’est le moyen idéal pour annuler les modifications déjà validées dans un référentiel public..
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
.
Cette leçon représente un chapitre de Git Succinctly, un eBook gratuit de l'équipe de Syncfusion.