web-dev-qa-db-fra.com

Comment fusionner git commits dans la branche develop vers une branche feature

J'ai une branche de développement et une branche de fonctionnalité dans mon dépôt git. J'ai ajouté un commit à développer et maintenant je veux que ce commit soit fusionné à ma branche de fonctionnalité. Si je fais ça

git checkout feature
git merge develop

Je me retrouve avec un commit de fusion. Étant donné que je fusionnerai fréquemment de nouveaux validations sur le développement de ma branche de fonctionnalités, j'aimerais éviter toutes ces validations de fusion inutiles. J'ai vu cela réponse qui a suggéré de faire un git rebase develop mais cela finit par rembobiner ma branche trop loin et le rebase échoue.

Mise à jour: Ce que j'ai fini par faire était

git checkout feature
git merge develop # this creates a merge commit that I don't want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git Push

Mise à jour: Je viens de remarquer que la validation d'origine lors du développement obtient un hachage différent lorsque je fusionne puis rebase sur la branche de fonctionnalité. Je ne pense pas que c'est ce que je veux parce que finalement je fusionnerai la fonctionnalité dans le développement et je suppose que cela ne jouera pas à Nice.

31
gitq

Pour intégrer une branche dans une autre, vous devez fusionner ou rebaser. Puisqu'il est seulement sûr de rebaser des validations qui ne sont référencées nulle part ailleurs (pas fusionnées avec d'autres branches locales; pas poussées vers une télécommande), il est généralement préférable de fusionner.

Si votre branche de fonctionnalité est purement locale, vous pouvez la rebaser en plus de développer. Cependant, il faut du temps pour comprendre comment fonctionne le rebase, et avant de le faire, il est assez facile de produire accidentellement des validations dupliquées ou supprimées. Les validations de fusion peuvent sembler bruyantes, mais la fusion est garantie d'être toujours sûre et prévisible.

Pour une meilleure vue, essayez de tout enregistrer ensemble dans un graphique:

git log --all --graph --oneline --decorate

Il convient également de déterminer si vous avez vraiment besoin les validations sur develop ont été fusionnées dans feature. Ce sont souvent des choses qui peuvent être laissées séparément jusqu'à ce que feature soit fusionné dans develop plus tard.

Si vous constatez régulièrement que vous avez besoin du code develop sur feature, cela peut être un signe que vos branches de fonctionnalités sont trop longues. Idéalement, les fonctionnalités devraient être divisées de manière à pouvoir être utilisées indépendamment, sans avoir besoin d'une intégration régulière en cours de route.

30
ben_h

Si vous ne voulez qu'un seul commit de la branche develop, vous pouvez le sélectionner dans votre branche feature:

 git checkout feature
 git cherry-pick -x <commit-SHA1>

La validation sera appliquée en tant que nouvelle au-dessus de votre branche (à condition qu'elle ne génère pas de conflit), et lorsque vous fusionnerez à nouveau la branche feature Git y fera face sans conflits.

12
CharlesB