Pour le moment, git fait ma tête, je ne peux pas trouver la meilleure solution pour ce qui suit.
Il y a deux branches, l'une appelée maître et l'autre appelée mobiledevicesupport . Je souhaite conserver mobiledevicesupport en tant que branche continue qui sera fusionnée / synchronisée avec la branche principale chaque fois que mobiledevicesupport est stable. Cela fusionnerait les modifications de mobiledevicesupport en master mais apporterait également toutes les modifications de master en mobiledevicesupport afin que la branche puisse continuer à être travaillée et les fonctionnalités améliorées ou modifiées. Cela doit fonctionner avec un référentiel central et plusieurs développeurs.
Veuillez un exemple de flux de travail similaires que d'autres personnes utilisent ou dites-moi simplement si cette idée est stupide et je devrais envisager d'autres options. Pour le moment, le flux de travail semble solide, mais je ne sais tout simplement pas comment faire fonctionner git de cette façon.
Merci, toute l'aide est très appréciée.
Mise à jour 1: si je devais fusionner le maître dans mobiledevicesupport et le support mobiledevice dans le maître, puis-je obtenir des validations répliquées dans les deux branches. Ou est git assez intelligent pour comprendre que j'ai tiré les dernières modifications de la branche A dans la branche B et ajouter la validation de fusion C à la branche B. Et j'ai tiré les dernières modifications de la branche B dans la branche A et ajouter la validation de fusion D à la branche UNE?
J'allais publier une image mais je n'ai pas assez de réputation pour elle, donc je suppose que l'illustration suivante devra faire. Deux branches fonctionnant en continu avec des fusions allant souvent dans les deux sens. La chose clé dont je ne suis pas sûr est de savoir comment git jouera les commits et remplira-t-il l'une des branches avec les commits de l'autre branche lors des fusions ou restera-t-il propre. J'ai déjà utilisé rebase, mais il semble que la branche soit terminée et que tous les commits aient été placés dans le maître, ou je me suis trompé. Merci du coup de main jusqu'à présent.
master
A--B--C-----H--I--J--M--N
\ / \
mobile \ / \
D--E--F--G--------K--L
Réponses:
oui fais juste
pour maintenir le support des appareils mobilisés en synchronisation avec le maître
puis lorsque vous êtes prêt à mettre mobiledevicesupport en master, fusionnez d'abord en master comme ci-dessus, puis ...
et c'est tout.
l'hypothèse ici est que mobilexxx est une branche thématique avec un travail qui n'est pas encore prêt à entrer dans votre branche principale. Donc, ne fusionnez en maître que lorsque le support des appareils mobilisés est au bon endroit
la source
Chaque fois que vous souhaitez obtenir les modifications du maître dans votre branche de travail, procédez comme suit
git rebase <remote>/master
. S'il y a des conflits. les résoudre.Lorsque votre branche de travail est prête, rebasez à nouveau, puis procédez
git push <remote> HEAD:master
. Cela mettra à jour la branche principale à distance (dépôt central).la source
git branch --contains <commit>
.L'approche de concept47 est la bonne façon de le faire, mais je vous conseille de fusionner avec l'option --no-ff afin de garder votre historique de commit clair.
la source
Oui, je suis d'accord avec votre approche. Pour fusionner mobiledevicesupport dans master, vous pouvez utiliser
De même, vous pouvez également fusionner master dans le support d'appareil mobile.
Q. Si la fusion croisée est un problème ou non.
R. Eh bien, cela dépend des validations effectuées dans la branche mobile * et la branche principale depuis la dernière synchronisation. Prenons cet exemple: après la dernière synchronisation, les validations suivantes se produisent sur ces branches
Supposons maintenant que le commit B ait apporté quelques modifications au fichier a.txt et que le commit D ait également apporté quelques modifications au a.txt. Voyons maintenant l'impact de chaque opération de fusion,
Maintenant, il existe deux types de fusion possibles
Git essaiera d'abord de fusionner FF et s'il trouve des conflits non résolus par git. Il échoue la fusion et vous demande de fusionner. Dans ce cas, un nouveau commit se produira qui sera responsable de la résolution des conflits dans a.txt.
Donc, en fin de compte, la fusion croisée n'est pas un problème et, finalement, vous devez le faire et c'est ce que signifie la synchronisation. Assurez-vous de vous salir les mains en fusionnant les branches avant de faire quoi que ce soit en production.
la source
La réponse acceptée via git merge fera le travail, mais laisse un héritage de validation compliqué, la bonne façon devrait être `` rebase '' via les étapes suivantes (en supposant que vous souhaitez conserver votre branche de fonctionnalités en sycn avec développer avant de faire le dernier push avant PR ).
1
git fetch
depuis votre branche de fonctionnalités (assurez-vous que la branche de fonctionnalités sur laquelle vous travaillez est à jour à ce jour)2
git rebase origin/develop
3 En cas de conflit, résolvez-les un par un
4 utiliser
git rebase --continue
une fois tous les conflits résolus5
git push --force
la source
Vous pensez dans la bonne direction. Fusionner le master avec mobiledevicesupport en continu et fusionner mobiledevicesupport avec master lorsque mobiledevicesupport est stable. Chaque développeur aura sa propre branche et pourra fusionner vers et depuis le support principal ou le support mobile en fonction de son rôle.
la source