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.
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.
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.