La chose essentielle que vous allez vouloir ici est git add -p
( -p
est un synonyme de --patch
). Il s'agit d'un moyen interactif d'enregistrer le contenu, qui vous permet de décider si chaque élément doit être intégré, et même de modifier manuellement le patch si nécessaire.
Pour l'utiliser en combinaison avec le cherry-pick :
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Merci à Tim Henigan de m'avoir rappelé que git-cherry-pick possède une option --no-commit, et merci à Felix Rabe de m'avoir fait remarquer qu'il fallait réinitialiser ! Si vous voulez seulement laisser quelques éléments en dehors du commit, vous pouvez utiliser git reset <path>...
pour déstocker uniquement ces fichiers).
Vous pouvez bien sûr fournir des chemins spécifiques à add -p
si nécessaire. Si vous commencez avec un patch, vous pouvez remplacer le fichier cherry-pick
avec apply
.
Si vous voulez vraiment un git cherry-pick -p <commit>
(cette option n'existe pas), vous pouvez utiliser l'option suivante
git checkout -p <commit>
Cela fera une différence entre le commit actuel et le commit que vous avez spécifié, et vous permettra d'appliquer les hunks de cette différence individuellement. Cette option peut être plus utile si le commit que vous tirez a des conflits de fusion dans une partie du commit qui ne vous intéresse pas. (Notez, cependant, que checkout
diffère de cherry-pick
: checkout
essaie d'appliquer <commit>
entièrement le contenu du site, cherry-pick
applique la différence entre le commit spécifié et son parent. Cela signifie que checkout
peut appliquer plus que ce commit, ce qui pourrait être plus que ce que vous voulez).