Récemment, on m'a demandé de cherry-pick
un commit.
Alors, que signifie choisir un commit en git? Comment le faites-vous?
Choisir Gryry dans Git signifie choisir un commit d'une branche et l'appliquer à une autre.
Cela contraste avec d'autres méthodes telles que merge
et rebase
, qui appliquent normalement de nombreux commits sur une autre branche.
Assurez-vous que vous êtes sur la branche à laquelle vous souhaitez appliquer le commit.
git checkout master
Exécutez les tâches suivantes:
git cherry-pick <commit-hash>
N.B .:
Si vous choisissez parmi une succursale publique, vous devriez envisager d'utiliser
git cherry-pick -x <commit-hash>
Cela générera un message de validation standardisé. De cette façon, vous (et vos collègues) pouvez toujours garder une trace de l'origine du commit et éviter des conflits de fusion dans le futur.
Si vous avez des notes attachées à la livraison, elles ne suivent pas la sélection. Pour les amener également, vous devez utiliser:
git notes copy <from> <to>
Liens supplémentaires:
Cette citation est tirée de; Contrôle de version avec Git (Très bon livre, je vous encourage à l'acheter si vous êtes intéressé par Git)
Edit: Puisque cette réponse continue à faire impression, je voudrais ajouter un tutoriel vidéo très agréable en action à ce sujet:
Youtube: Introduction à Git cherry-pick
Utilisation de git cherry-pick La commande git cherry-pick commit applique les modifications introduites par le commit nommé sur la branche en cours. Il introduira un nouveau commit distinct. À proprement parler, l’utilisation de git cherry-pick ne modifie pas l’historique existant dans un référentiel; au lieu de cela, cela ajoute à l'histoire. Comme pour les autres opérations Git introduisant des modifications via le processus d'application d'un diff, vous devrez peut-être résoudre des conflits pour appliquer pleinement les modifications de la validation donnée . La commande git cherry-pick est généralement utilisée pour introduire des commits particuliers d'une branche au sein d'un référentiel sur une autre branche. Une utilisation courante consiste à effectuer des transferts en aval ou en aval d'une branche de maintenance vers une branche de développement.
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above
avant:
après:
La cueillette dans Git est conçue pour appliquer certains commit d'une branche à une autre. Cela peut être fait si vous par exemple. fait une erreur et commis un changement dans la mauvaise branche, mais ne veulent pas fusionner toute la branche. Vous pouvez simplement par exemple. annulez le commit et sélectionnez-le sur une autre branche.
Pour l'utiliser, vous avez simplement besoin de git cherry-pick hash
, où hash
est un hachage de validation d'une autre branche.
Pour la procédure complète, voir: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
Petit exemple de situation, quand vous avez besoin d'un choix de cerises
Envisagez le scénario suivant. Vous avez deux branches.
a) release1 - Cette branche est destinée à votre client, mais il reste encore quelques bugs à corriger.
b) master - branche de maître classique, où vous pouvez par exemple ajouter une fonctionnalité pour la release2.
NOW: Vous corrigez quelque chose dans release1. Bien sûr, vous avez aussi besoin de ce correctif dans master. Et c’est un cas d’utilisation typique pour la cueillette des cerises. Donc, choisir dans ce scénario signifie que vous prenez un commit de la branche release1 et l'incluez dans la branche master.
cherry-pick est une fonctionnalité de Git. Si quelqu'un veut valider des commits spécifiques dans une branche vers une branche cible, alors le choix de recherche est utilisé.
Les étapes à suivre pour choisir un cerisier sont les suivantes.
git cherry-pick <commit id>
Ici, l'id de commit est l'id d'activité d'une autre branche.Eg.
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
Vous pouvez penser qu'un choix de cerises ressemble à un rebase, ou plutôt qu'il est géré comme un rebase. J'entends par là qu'il faut un commit existant et le régénère en prenant comme point de départ le responsable de la branche sur laquelle vous vous trouvez.
Un rebase
prend un commit ayant un parent X et le régénère comme s'il avait réellement un parent, et c'est précisément ce que fait un cherry-pick
.
Le choix des cerises concerne davantage la façon dont vous sélectionnez les commits. Avec pull
(rebase), git régénère implicitement vos commits locaux au-dessus de ce qui est tiré vers votre branche, mais avec cherry-pick
vous choisissez explicitement un ou plusieurs commit (s) et les régénérez implicitement par dessus de votre branche actuelle.
Donc, la façon dont vous le faites diffère, mais sous le capot, ce sont des opérations très similaires - la régénération des commits.
C'est un peu comme copier (quelque part) et coller (quelque part), mais pour des commits spécifiques.
Si vous souhaitez effectuer un correctif, par exemple, vous pouvez utiliser la fonction cherry-pick
.
Faites votre cherry-pick
dans une branche de développement et merge
qui s’engage dans une branche de publication. De même, faites un cherry-pick
d'une branche de version à master. Voila
Lorsque vous travaillez avec une équipe de développeurs sur un projet, la gestion des modifications entre plusieurs branches de git peut devenir une tâche complexe. Parfois, vous ne voulez pas fusionner une branche entière dans une autre et vous n'avez besoin que de choisir un ou deux commits spécifiques. Ce processus s'appelle la "cueillette des cerises".
Vous avez trouvé un excellent article sur la cueillette des cerises, consultez-le pour plus de détails: https://www.previousnext.com.au/blog/intro-cherry-picking-git
Si vous voulez fusionner sans les identifiants de commit, vous pouvez utiliser cette commande
git cherry-pick master~2 master~0
La commande ci-dessus fusionnera les trois derniers commits du maître de 1 à 3
Si vous voulez faire cela pour un seul commit, supprimez simplement la dernière option
git cherry-pick master~2
De cette façon, vous fusionnerez le 3ème commit à partir de la fin du master.