Objectifs
- Mettre de côté des modifications en cours sans les commiter avec
git stash. - Appliquer un commit spécifique d’une branche à une autre avec
git cherry-pick. - Marquer des points importants de l’historique (comme les versions logicielles) avec
git tag. - Comprendre le principe des
git hookspour l’automatisation locale.
Cette leçon présente quelques outils puissants de Git qui vous aideront à gérer des scénarios plus complexes.
git stash : Mettre de côté son travail
Imaginez ce scénario : vous êtes au milieu d’une modification complexe, mais un bug urgent est signalé en production. Vous devez changer de branche immédiatement, mais votre travail n’est pas prêt à être commité. git stash est la solution.
git stashougit stash push -m "mon message": Prend toutes vos modifications (suivies et non-commitées) et les met de côté dans une “pile”, restaurant votre répertoire de travail à l’état du dernier commit (HEAD). Votre répertoire est maintenant propre et vous pouvez changer de branche.git stash list: Affiche la liste de vos “stashes”.git stash pop: Récupère le dernier stash et l’applique à votre répertoire de travail.git stash apply stash@{1}: Applique un stash spécifique sans le supprimer de la pile.
git cherry-pick : Cueillir un commit
Parfois, vous n’avez pas besoin de fusionner une branche entière, mais seulement de récupérer un seul commit spécifique (par exemple, un correctif de sécurité critique) et de l’appliquer sur votre branche courante. C’est le rôle de git cherry-pick.
- Trouvez le hash du commit que vous voulez appliquer (avec
git log). - Placez-vous sur la branche qui doit recevoir le correctif.
- Exécutez
git cherry-pick <hash-du-commit>.
Git va alors créer un nouveau commit sur votre branche qui contient les mêmes changements que le commit “cueilli”.
git tag : Marquer les versions
Un tag est un marqueur qui pointe vers un commit spécifique. On l’utilise principalement pour marquer les versions d’un logiciel (v1.0, v2.1.3).
git tag: Liste tous les tags.git tag -a v1.0 -m "Version 1.0": Crée un tag annoté. C’est la bonne pratique : il contient des métadonnées (auteur, date, message) et peut être signé.git push origin v1.0:git pushn’envoie pas les tags par défaut. Il faut les pousser explicitement.
git hooks : Automatiser des actions locales
Les “hooks” sont des scripts que Git peut exécuter automatiquement à certains moments clés (avant un commit, avant un push, etc.). Ils se trouvent dans le dossier .git/hooks/ de votre dépôt.
pre-commit: Le plus courant. Permet de lancer un linter ou un formateur de code avant que le commit ne soit créé. Si le script échoue, le commit est avorté.pre-push: Permet de lancer des tests avant que le code ne soit envoyé au dépôt distant.
C’est un outil d’automatisation puissant mais local (non partagé via git clone).
Bonnes pratiques
- Utilisez
git stashpour des changements temporaires. Pour un travail de plus longue haleine, préférez un commit “WIP” (Work In Progress) sur une branche dédiée. - Utilisez
git cherry-pickavec parcimonie. Si vous devez l’utiliser souvent, c’est peut-être le signe que votre stratégie de branches peut être améliorée. - Utilisez toujours des tags annotés (
-a) pour marquer vos releases.
Exercices
-
Le Stash Rapide :
- Modifiez un fichier dans votre projet, mais ne faites ni
addnicommit. - Exécutez
git stash. Observez que votre modification a disparu. - Exécutez
git stash listpour voir votre stash. - Exécutez
git stash poppour récupérer votre modification.
- Modifiez un fichier dans votre projet, mais ne faites ni
-
Le Correctif Chirurgical :
- Créez une branche
feature/Aet faites-y un commit avec un message clair. Notez son hash. - Créez une autre branche
feature/Bà partir demain. - Sur
feature/B, utilisezgit cherry-pick <hash>pour appliquer le commit de la branche A.
- Créez une branche
-
Votre première release :
- Sur votre branche
main, créez un tag annotév0.1.0-alpha. - Vérifiez qu’il a bien été créé avec
git tag. - Affichez ses détails avec
git show v0.1.0-alpha.
- Sur votre branche