Comment fusionner un commit spécifique dans Git
j'ai bifurqué une branche d'un dépôt à GitHub et j'ai commis quelque chose qui m'est propre. Maintenant j'ai trouvé que le dépôt original avait une bonne caractéristique qui était à HEAD
.
je veux le fusionner seulement sans les propagations précédentes. Que dois-je faire? Je sais comment fusionner tous les commits:
git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push
3 réponses
' git cherry-pick
' ça devrait être ta réponse.
appliquer le changement introduit par une commit existante.
N'oubliez pas de lire bdonlan 's réponse sur la suite de cherry-picking dans ce post:
"Tirez sur tous les commits de la branche, pousser spécifié s'engage à l'autre" , où:
A-----B------C
\
\
D
devient:
A-----B------C
\
\
D-----C'
le problème avec ce commit est que git considère commits à inclure toute l'histoire avant eux
où C 'a une autre
SHA-1
ID.
De même, choisir un commit d'une branche à l'autre implique de générer un patch, puis de l'appliquer, perdant ainsi l'histoire de cette façon.cette modification des engagements brise fonctionnalité de fusion de Git entre autres choses (bien que si utilisé avec parcimonie il ya heuristiques qui seront papier sur ce).
Plus important encore, ignore les dépendances fonctionnelles - si C utilise réellement une fonction définie en B, vous ne saurez jamais .
vous pouvez utiliser git cherry-pick pour appliquer un seul commit par lui-même à votre branche actuelle.
exemple: git cherry-pick d42c389f
essayons de prendre un exemple et de comprendre:
j'ai une branche, dites master , pointant vers X
Où Y
maintenant dire pour la branche Y je dois gap-close les commits entre la branche principale et la nouvelle branche. Ci-dessous la procédure que nous pouvons suivre:
Étape 1:
git checkout -b local origin/new
où local est le nom de la succursale. N'importe quel nom peut être donné.
Étape 2:
git merge origin/master --no-ff --stat -v --log=300
fusionne les commits de la branche principale à la nouvelle branche et crée aussi une commit de fusion du message de journal avec des descriptions d'une ligne au plus
pour plus d'informations et de paramètres sur la fusion Git, veuillez vous référer à:
git merge --help
aussi si vous avez besoin de fusionner un commit spécifique, alors vous pouvez utiliser:
git cherry-pick <commit-id>