Récemment, quelqu’un a soumis une excellente demande d’extraction à l’un de mes référentiels, mais avant que je puisse le fusionner, un commentateur leur a donné de mauvais conseils et ils ont mis en œuvre les mauvais conseils. Maintenant, j’ai eu une pull request avec un bon commit et un mauvais commit.
J’ai demandé à l’auteur : “Pourriez-vous re-PR cela, sans le mauvais commit ?” Pas de réponse.
Je savais que je pouvais copier le code dans une nouvelle branche, mais je voulais attribuer l’auteur original ! Puis je me suis arrêté et j’ai pensé : “Puis-je faire ça dans Git ?”
Il s’avère que? Toi peut ne récupérez que des commits spécifiques avec une commande git très simple : git cherry-pick
.
Comment utiliser git cherry-pick
Git est cherry-pick
la commande vous permet de “cueillir des cerises” seul les commits que vous voulez d’une autre branche.
Voici les étapes pour l’utiliser :
- Déroulez la branche localement. Utilisez votre interface graphique git ou déroulez-la sur la ligne de commande, comme vous le souhaitez.
- Revenez dans la branche que vous fusionnez dans. Vous le ferez probablement en courant
git checkout master
. - Trouvez les commits que vous souhaitez insérer dans votre branche. Accédez au journal git ou à l’interface utilisateur GitHub et récupérez les hachages de commit uniques pour chacun des commits que vous souhaitez.
- “Cherry pick” les commits que vous voulez dans cette branche. Exécutez cette commande :
git cherry-pick super-long-hash-here
. Cela ne tirera que ce commit dans votre branche actuelle. - Poussez cette branche comme d’habitude.
git push origin master
Un exemple
Donc, j’ai eu une pull request introduisant le log
composant. Je suis allé à la demande d’extraction dans GitHub et j’ai tiré la branche vers le bas (en utilisant les instructions “utiliser la ligne de commande”, mais j’aurais également pu tirer vers le bas avec l’interface utilisateur GitHub.)
Sur la ligne de commande, j’ai ensuite exécuté git checkout master
. Je suis allé à l’interface utilisateur GitHub, j’ai trouvé le commit que je voulais de l’autre branche et j’ai saisi son hachage de commit en cliquant sur la petite icône “copier” à côté de lui dans la liste des commits. Puis je suis retourné au terminal et j’ai couru git cherry-pick long-hash-here-pasted-from-github
.
Enfin, je l’ai poussé jusqu’à GitHub avec git push origin master
. Fait! Enfin, j’ai fermé la pull request manuellement avec un lien vers le commit.
Voici l’ensemble du processus :
git fetch origin
git checkout -b add-log-component origin/add-log-component
git checkout master
git cherry-pick COMMIT-HASH-HERE
git push origin master
Vous pouvez également regarder une animation de ce à quoi ressemblait le processus ici :