Aller au contenu principal

Commande Git Cherry-pick


Table des matières


  1. Qu'est-ce que Cherry-pick ?
  2. Syntaxe de base
  3. Cas d'usage
  4. Cherry-pick multiple
  5. Gestion des conflits
  6. 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

AspectMergeCherry-pick
CommitsTous les commitsUn seul commit
HistoriqueLiéIndépendant
UsageIntégrer une brancheCopier 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

OptionDescription
-n ou --no-commitNe pas commiter automatiquement
-e ou --editModifier le message
-xAjouter une référence au commit original
--signoffAjouter 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

SituationRecommandé
Hotfix urgent en prod
Backport de fix
Récupérer d'une branche morte
Commit sur mauvaise branche

❌ Quand éviter cherry-pick

SituationAlternative
Intégrer une feature complètegit merge
Synchroniser des branchesgit rebase
Usage répétitifRevoir le workflow

Conseils

  1. Utilisez -x pour garder la traçabilité
  2. Testez après chaque cherry-pick
  3. Évitez les cherry-picks en cascade (signe d'un mauvais workflow)
  4. Documentez pourquoi vous cherry-pick

Résumé

CommandeDescription
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..BPlage de commits
git cherry-pick --abortAnnuler
git cherry-pick --continueContinuer après conflit

🔝 Retour à la table des matières