2009-11-03 9 views
15

Parfois, je travaille avec plusieurs branches à la fois. Dites que j'ai des branches appelées master, release-1.1, et experimental. Je crée un nouveau fichier ou faire un changement dans experimental et je veux que ce changement unique s'applique aux autres branches.Comment fusionner un seul commit?

Puis-je le faire en git? Si je fusionne simplement le commit dans une autre branche, git automatiquement "fast-forwards" et inclut tous les commit entre. Mais il doit y avoir un moyen de gérer ce cas d'utilisation.

Répondre

22

Ce que vous voulez faire est appelé cherry picking. Vous pouvez choisir cerise un commit en utilisant la commande suivante:

$ git cherry-pick <commit hash or name> 

Cela incorporera le changement de ce commit que dans votre branche actuelle. Notez cependant que cela crée un nouveau commit; ce nouveau commit a exactement les mêmes changements que le commit sélectionné (et même la même date de commit et l'auteur), mais il est techniquement un nouveau commit, donc vous le verrez comme un nouveau commit, eg, gitk . Vous devrez également effectuer le choix de cerise pour chaque branche dans laquelle vous voulez voir le changement.

4

La solution, mais malheureusement celui que vous avez besoin plutôt de savoir avant faire le changement, est de créer la branche séparée uniquement pour ce changement (que l'on appelle « branche sujet »), au large de la première branche ou plus tôt commettras c'est logique, et fusionnez cette branche dans n'importe quelle branche qui a besoin de cette validation.

Dans certains cas, une autre solution pourrait être de modifier la branche de maintenance, de fusionner la branche de maintenance en branche stable et de fusionner une branche stable en branche de développement.

Junio ​​Hamano C (mainteneur de Git) a écrit à ce sujet dans son blog: Resolving conflicts/dependencies between topic branches early

+0

Avez-vous un lien vers cette entrée de blog? Je pense que cela serait utile, venant d'une autorité Git. –

+0

Peut-être que cette entrée de blog? http://gitster.livejournal.com/27297.html – VonC

+0

Cherry picking semble plus approprié que cela, désolé de le dire. –