Commande Git Cherry-pick
Table des matières
- Qu'est-ce que Cherry-pick ?
- Syntaxe de base
- Cas d'usage
- Cherry-pick multiple
- Gestion des conflits
- Bonnes pratiques
1 - Qu'est-ce que Cherry-pick ?
git cherry-pick permet de copier un commit spécifique d'une branche vers une autre.
Visualisation
Avant:
A---B---C feature
/
D---E---F main
Après cherry-pick de B sur main:
A---B---C feature
/
D---E---F---B' main
Le commit B est copié (pas déplacé) vers main avec un nouveau hash (B').
Différence avec merge
| Aspect | Merge | Cherry-pick |
|---|---|---|
| Commits | Tous les commits | Un seul commit |
| Historique | Lié | Indépendant |
| Usage | Intégrer une branche | Copier un commit spécifique |
🔝 Retour à la table des matières
2 - Syntaxe de base
Cherry-pick un commit
git cherry-pick <commit-hash>
Exemple
# Trouver le commit à cherry-pick
git log feature/login --oneline
# abc1234 fix: critical bug fix
# def5678 feat: add login
# ghi9012 Initial setup
# Aller sur main
git checkout main
# Cherry-pick le fix
git cherry-pick abc1234
Options courantes
| Option | Description |
|---|---|
-n ou --no-commit | Ne pas commiter automatiquement |
-e ou --edit | Modifier le message |
-x | Ajouter une référence au commit original |
--signoff | Ajouter votre signature |
Avec l'option -x
git cherry-pick -x abc1234
Message résultant :
fix: critical bug fix
(cherry picked from commit abc1234...)
🔝 Retour à la table des matières
3 - Cas d'usage
Cas 1 : Hotfix en production
Un bug est corrigé sur develop mais doit être appliqué immédiatement sur main :
# Le fix est sur develop
git log develop --oneline
# abc1234 fix: security vulnerability
# Appliquer sur main (production)
git checkout main
git cherry-pick abc1234
git push origin main
Cas 2 : Récupérer un commit d'une branche abandonnée
# La branche experiment a un bon commit
git log experiment --oneline
# abc1234 feat: useful feature
# def5678 broken stuff
# ghi9012 more broken stuff
# Récupérer seulement le bon commit
git checkout main
git cherry-pick abc1234
Cas 3 : Backport vers une ancienne version
# Fix sur main (v3)
git log main --oneline
# abc1234 fix: important fix
# Appliquer sur la branche de maintenance v2
git checkout release/v2
git cherry-pick abc1234
Cas 4 : Réorganiser des commits
# Vous avez commité sur la mauvaise branche
git checkout feature/correct-branch
git cherry-pick abc1234
# Puis supprimer de la mauvaise branche
git checkout feature/wrong-branch
git reset --hard HEAD~1
🔝 Retour à la table des matières
4 - Cherry-pick multiple
Plusieurs commits individuels
git cherry-pick abc1234 def5678 ghi9012
Plage de commits
# De A à C (A non inclus, C inclus)
git cherry-pick A..C
# De A à C (A inclus)
git cherry-pick A^..C
Sans commiter (staging seulement)
git cherry-pick -n abc1234
git cherry-pick -n def5678
git cherry-pick -n ghi9012
# Un seul commit pour tout
git commit -m "feat: combined features from other branch"
Exemple concret
# Récupérer les 3 derniers commits de feature
git log feature --oneline
# abc1234 commit 3
# def5678 commit 2
# ghi9012 commit 1
# jkl3456 base
# Cherry-pick tous
git checkout main
git cherry-pick ghi9012 def5678 abc1234
# Ou avec la plage
git cherry-pick jkl3456..abc1234
🔝 Retour à la table des matières
5 - Gestion des conflits
Quand survient un conflit ?
Quand le code a évolué différemment sur les deux branches.
git cherry-pick abc1234
# CONFLICT (content): Merge conflict in file.txt
Résoudre les conflits
# 1. Voir les fichiers en conflit
git status
# 2. Éditer les fichiers
code file.txt
# 3. Marquer comme résolu
git add file.txt
# 4. Continuer le cherry-pick
git cherry-pick --continue
Abandonner le cherry-pick
git cherry-pick --abort
Sauter un commit (lors d'un multi-pick)
git cherry-pick --skip
🔝 Retour à la table des matières
6 - Bonnes pratiques
✅ Quand utiliser cherry-pick
| Situation | Recommandé |
|---|---|
| Hotfix urgent en prod | ✅ |
| Backport de fix | ✅ |
| Récupérer d'une branche morte | ✅ |
| Commit sur mauvaise branche | ✅ |
❌ Quand éviter cherry-pick
| Situation | Alternative |
|---|---|
| Intégrer une feature complète | git merge |
| Synchroniser des branches | git rebase |
| Usage répétitif | Revoir le workflow |
Conseils
- Utilisez
-xpour garder la traçabilité - Testez après chaque cherry-pick
- Évitez les cherry-picks en cascade (signe d'un mauvais workflow)
- Documentez pourquoi vous cherry-pick
Résumé
| Commande | Description |
|---|---|
git cherry-pick <hash> | Copier un commit |
git cherry-pick -x <hash> | Avec référence au commit original |
git cherry-pick -n <hash> | Sans commiter |
git cherry-pick A..B | Plage de commits |
git cherry-pick --abort | Annuler |
git cherry-pick --continue | Continuer après conflit |