Pour cherry-pick des commits dépendants sur macOS, identifiez d'abord le commit prérequis et appliquez-le avant le commit qui en dépend. Dans Terminal, examinez l'historique de la branche source, confirmez que la branche de destination a un arbre de travail propre, puis appliquez cherry-pick sur les identifiants de commit sélectionnés dans l'ordre des dépendances. Git applique la modification de chaque commit et crée un nouveau commit sur la branche actuellement extraite ; il ne détermine pas automatiquement les modifications dont votre destination a besoin. Documentation de Git cherry-pick

Quel ordre les commits dépendants doivent-ils suivre ?

Appliquez un prérequis avant la modification qui en dépend. Par exemple, si le commit a1b2c3 ajoute une fonction et que le commit d4e5f6 appelle cette fonction, appliquez d'abord a1b2c3, puis d4e5f6. Si le second commit attend un fichier, une interface ou un comportement introduit par le premier, inverser leur ordre peut entraîner des conflits ou laisser la destination dans un état intermédiaire cassé.

Utilisez l'ordre parent-enfant de la branche source comme point de départ. Les directives relatives aux workflows Git recommandent de diviser le travail en commits logiques, cohérents et pouvant fonctionner de manière indépendante ; dans la pratique, les historiques réels ne répondent pas toujours à cet idéal. Examinez donc ce que chaque commit sélectionné modifie et ce dont il dépend. Le cherry-picking copie les modifications des commits individuellement, tandis que la fusion (merge) apporte les modifications à l'échelle de la branche. Si vous avez besoin de l'ensemble de la branche et de son historique, demandez-vous si une fusion n'est pas plus appropriée que de sélectionner les commits un par un. Documentation sur les workflows Git

Examiner l'historique dans Terminal

Ouvrez Terminal sur votre Mac, placez-vous dans le dossier du dépôt et vérifiez votre état actuel. Remplacez le chemin entre guillemets par le chemin réel de votre dépôt ; les guillemets permettent de prendre en compte les espaces dans les noms de dossiers.

cd "/path/to/your/repository"
git status --short --branch
git log --graph --oneline --decorate --all

La première commande change le répertoire de travail de Terminal. git status affiche la branche courante ainsi que les éventuelles modifications locales. La vue graphique vous aide à visualiser les commits présents sur la branche source et leur ordre. Le Terminal de macOS utilise zsh par défaut, et les commandes ci-dessus utilisent la syntaxe standard du shell pris en charge. Guide de Terminal par Apple

Si la branche nécessaire est une branche de suivi distante et que son dernier état n'est pas présent localement, récupérez-le (fetch) avant de l'examiner :

git fetch origin
git log --reverse --oneline origin/feature-name

Remplacez origin/feature-name par le nom réel de la branche distante. L'option reverse affiche les commits du plus ancien au plus récent. Pour un historique volumineux, réduisez le log aux commits situés après une base commune connue, par exemple git log --reverse --oneline base-commit..origin/feature-name. Lisez les sujets obtenus, puis inspectez les modifications candidates avec git show COMMIT_ID. Une plage de commits est pratique pour la revue, mais ne partez pas du principe qu'un argument de plage garantit à lui seul l'ordre de dépendance personnalisé dont vous avez besoin : l'indication explicite des identifiants de commit rend la séquence visée claire.

Effectuer le cherry-pick dans l'ordre des prérequis

Avant de commencer, commitez ou mettez de côté en toute sécurité vos modifications locales. L'opération standard de cherry-pick nécessite un arbre de travail propre, et vous devez confirmer la branche de destination avant d'appliquer quoi que ce soit. Remplacez les identifiants d'exemple par les identifiants de commit réels, complets ou abrégés, classés du prérequis au commit dépendant :

git switch destination-branch
git status --short --branch
git cherry-pick a1b2c3 d4e5f6

Git crée un nouveau commit pour chaque modification sélectionnée, dans l'ordre fourni. Vérifiez attentivement la sortie : si une modification était déjà incluse par une autre voie, ou si la destination a divergé, Git peut signaler une modification vide ou s'arrêter sur un conflit. Ensuite, inspectez l'historique résultant et l'arbre de travail à l'aide de git log --oneline -n 5 et git status. Exécutez les vérifications appropriées du projet avant de vous fier au résultat ; un cherry-pick sans erreur signifie seulement que Git a appliqué les modifications, et non que la fonctionnalité se comporte comme prévu.

En cas de conflit sur un commit

Lorsqu'un cherry-pick entre en conflit, Git s'interrompt sur ce commit. Inspectez les fichiers concernés et résolvez chaque conflit en combinant la modification source souhaitée avec le contenu actuel de la branche de destination. Indexez les fichiers résolus avec git add et poursuivez la séquence :

git add "path/to/resolved-file"
git cherry-pick --continue

Utilisez git cherry-pick --abort pour annuler la séquence en cours et revenir à l'état antérieur à son lancement. N'utilisez git cherry-pick --skip que si vous avez décidé que la modification du commit actuel doit être ignorée ; les commits ultérieurs peuvent en dépendre, de sorte que l'ignorer peut entraîner l'échec de ces modifications ou leur faire perdre leur sens. Git documente continue, skip et abort comme des commandes de contrôle pour une opération en cours. Options du séquenceur de git cherry-pick

Pour un commit de fusion (merge commit), prenez un temps de réflexion avant de le sélectionner : Git exige de choisir un parent de la ligne principale (mainline) car la fusion a plusieurs parents. De même, si des commits ultérieurs ne peuvent être compris sans une longue suite de modifications antérieures, n'en sélectionner que quelques-uns risque de ne pas produire un résultat cohérent. Examinez les dépendances et choisissez la séquence complète la plus restreinte permettant de les préserver.

Sources