Vous pouvez utiliser une combinaison sérielle de git rebase
et git branch
pour appliquer un groupe de commits sur une autre branche. Comme déjà posté par wolfc, la première commande copie en fait les commits. Cependant, le changement n'est pas visible tant que vous n'ajoutez pas un nom de branche au commit le plus récent du groupe.
Veuillez ouvrir l'image dans un nouvel onglet...
Pour résumer les commandes en forme de texte :
- Ouvrez gitk en tant que processus indépendant en utilisant la commande :
gitk --all &
.
- Exécutez
git rebase --onto a b f
.
- Appuyez sur F5 dans gitk. Rien ne change. Mais aucun
HEAD
n'est marqué.
- Exécutez
git branch selection
- Appuyez sur F5 dans gitk. La nouvelle branche avec ses commits apparaît.
Cela devrait clarifier les choses :
- Le commit
a
est la nouvelle destination racine du groupe.
- Le commit
b
est le commit avant le premier commit du groupe (exclus).
- Le commit
f
est le dernier commit du groupe (inclus).
Ensuite, vous pourriez utiliser git checkout feature && git reset --hard b
pour supprimer les commits c
à f
de la branche feature
.
En plus de cette réponse, j'ai écrit un article de blog qui décrit les commandes dans un autre scénario qui devrait aider à les utiliser de manière générale.
16 votes
Le rebase que vous mentionnez n'est pas vraiment pertinent pour la question, n'est-ce pas? (Je comprends que vous vouliez que
b
soit basé surf
plus tard, mais cela n'a rien à voir avec le cherry-picking.)