17. Suppression dun commit dune branche
Objectifs
- Pour apprendre à supprimer les derniers commits de la branche
Revert
est une commande puissante de la section précédente qui vous permet dannuler tous les commits vers le référentiel. Cependant, les commits originaux et annulés sont visibles dans lhistorique de la branche (lors de lutilisation de la commande git log
).
Souvent, après quun commit est déjà fait, on se rend compte que cétait une erreur. Ce serait bien davoir un annulez la commande qui permet de supprimer immédiatement le (s) commit (s) incorrect (s). Cette commande empêcherait lapparition dun ou plusieurs commits indésirables dans lhistorique de git log
.
01 La commande de réinitialisation
Nous avons déjà utilisé la commande reset
pour faire correspondre la zone tampon et le commit sélectionné (le commit HEAD a été utilisé dans la leçon précédente).
Lorsquune référence de validation est donnée (cest-à-dire, une branche, un hachage ou un nom de balise), le reset
va …
- Écraser la branche actuelle pour quelle pointe vers le commit correct
- Réinitialise éventuellement la zone tampon afin quelle soit conforme au commit spécifié
- Réinitialisez éventuellement le répertoire de travail pour quil corresponde au commit spécifié
02 Vérifiez notre historique
Faisons une analyse rapide de notre historique de commit .
Exécuter:
git hist
Résultat:
Nous voyons que les deux derniers commits dans cette branche sont « Oups « et » Revert Oops « . Supprimons-les avec la commande reset
.
03 Marquer cette branche en premier
Marquons le dernier commit avec tag, so you can find it after removing a commit(s).
Exécuter:
git tag oops
04 Réinitialiser la validation sur Oops précédent
Dans le journal dhistorique ci-dessus, le commit marqué « v1 » est avant les commits « Oops » et « Revert Oops ». Réinitialisons la branche à ce point. Comme la branche a une balise, nous pouvons utiliser le nom de la balise dans la commande reset (si elle na pas de balise, nous pouvons utiliser la valeur de hachage).
Exécuter:
git reset --hard v1git hist
Résultat:
Notre branche principale pointe vers la validation v1 et les commits « Revert Oops » et « Oops » nexistent plus dans la branche. Le paramètre --hard
fait que le répertoire de travail reflète la nouvelle tête de branche.
05 Rien nest jamais perdu
Quest-il arrivé aux mauvais commits? Ils sont toujours dans le référentiel. En fait, on peut encore sy référer. Au début de la leçon, nous avons créé la balise « oops » pour le commit annulé. Jetons un coup doeil à tous les commits.
Exécuter:
git hist --all
Résultat:
Nous pouvons voir que les mauvais commits ne sont pas partis. Ils ne sont plus listés dans la branche master mais restent toujours dans le référentiel. Ils seraient toujours dans le référentiel si nous ne les étiquetions pas, mais nous pourrions les référencer uniquement par leurs noms de hachage. Les commits non référencés restent dans le référentiel jusquà ce que le logiciel de ramasse-miettes soit exécuté par le système.
06 Réinitialiser les dangers
Les réinitialisations sur les branches locales sont généralement inoffensives. Les conséquences de tout « accident » peuvent être annulées en utilisant le bon commit.
Cependant, dautres utilisateurs partageant la branche peuvent être confus si la branche est partagée sur des dépôts distants.