On dirait que vous pouvez faire ces commits sur une branche autre que maître, puis fusionner cette branche à la fois maître et votre deuxième branche:
git checkout working-branch
<do some work>
git commit
git checkout master
git merge working-branch
git checkout second-branch
git merge working-branch
Cela est beaucoup, beaucoup mieux que cerise choisir parce qu'il n'implique pas de doublons commits dans l'histoire, se débarrasse de tous les problèmes de sélection d'un commit deux fois (que vous devez actuellement éviter manuellement) ... et est juste la façon dont git est conçu pour fonctionner. Je ne sais pas ce qu'est votre deuxième branche, mais ce que je décris est essentiellement le flux de travail commun de fusionner périodiquement les branches de maintenance et de sujet dans le maître ainsi que dans toutes les autres branches de maintenance ou de modification modifiées appropriées.
Je vous recommande fortement d'adopter un flux de travail où cela se fait en fusionnant comme décrit ci-dessus, mais pour répondre à la question que vous avez posée, si vous devez absolument travailler sur master et picker, vous pourriez écrire petit script, quelque chose comme:
#!/bin/bash
# take two arguments:
# 1. other branch to put commits on
# 2. number of commits to cherry-pick from master
if ! git checkout $1; then
exit
fi
git rev-list --reverse -n $2 master |
while read commit; do
if ! git cherry-pick $commit; then
exit
fi
done
De toute évidence, il existe des moyens de rendre le script plus robuste, par exemple Ajout de la possibilité de reprendre après des sélections de cerises dont les correctifs ne s'appliquent pas correctement, mais c'est un début.
Vous pouvez vous amuser avec la façon dont vous utilisez git-rev-list pour sélectionner les commits, bien sûr. Vous pouvez même passer tout sauf le premier argument à git-rev-list, de sorte que vous pouvez faire cherries-pick <branch> -n 5 master
ou cherries-pick <branch> release_tag..master
ou tout ce que vous voulez. Jetez un oeil à son man page!
Vous pouvez également utiliser git-rebase
comme cela a été suggéré ailleurs, mais parce que vous ne voulez pas vraiment à se déplacer maître, vous allez finir par faire quelque chose comme ceci:
git branch master-copy master
git rebase --onto <branch> master~5 master
git checkout <branch>
git merge master-copy
git branch -d master-copy
Beaucoup impressionnant, merci! –