371 votes

Git: Comment garder une branche synchronisée avec le maître

Au moment où git est en train de faire ma tête, je n'arrive pas à trouver la meilleure solution pour la suite.

Il y a deux branches, l'une appelée maître et un autre appelé mobiledevicesupport. Je veux garder mobiledevicesupport continue de branche qui seront fusionnés/synchronisés avec la branche principale à chaque fois que mobiledevicesupport est stable. Cela permettrait de fusionner les changements de mobiledevicesupport en maître, mais aussi apporter tous les changements de master en mobiledevicesupport de sorte que le service puisse continuer à être travaillé et les fonctionnalités améliorées ou modifiées. Ce doit travailler avec un référentiel central et de plusieurs développeurs.

Veuillez un exemple de flux de travail similaire à d'autres personnes d'utiliser ou juste me dire si cette idée est stupide et que je devrais envisager d'autres options. Au moment où le flux de travail semble de son, mais je ne sais pas comment je peux faire git travailler de cette façon.

Merci, toute aide appréciée.

Mise à jour 1: Si j'étais à la fusion de master en mobiledevicesupport et mobiledevice de la prise en charge de maître, ai-je répliqué s'engage entre les deux branches. Ou est-git assez intelligent pour le travail que j'ai tiré les modifications les plus récentes de la direction générale de la direction générale B et ajoutez une fusion commettre C à direction de B. Et j'ai tiré les dernières modifications de la branche B en direction de Un et ajouter de fusion commettre D de la branche A?

J'allais poster une image mais je n'ai pas assez de réputation pour elle, donc je suppose que l'illustration suivante. Deux branches en permanence en cours d'exécution avec fusionne dans les deux directions souvent. La clé de chose que je ne suis pas sûr de savoir comment git jeu s'engage et va remplir une ou l'autre branche avec les commits de l'autre branche sur fusionne ou va-il rester propre. J'ai utilisé cela avant, mais il semble à la fin de la branche et de mettre tous les commits dans le maître, ou j'ai fait de mal. Merci pour l'aide pour l'instant.

master
A--B--C-----H--I--J--M--N
       \   /    \
mobile  \ /      \
D--E--F--G--------K--L

606voto

concept47 Points 3642

oui juste faire

 git checkout master
git pull
git checkout mobiledevicesupport
git merge master
 

pour maintenir le support mobedevices en phase avec le maître

puis, quand vous êtes prêt à placer l’appareil mobedevicesupport en master, commencez par fusionner master comme ci-dessus, puis ...

 git checkout master
git merge mobiledevicesupport
git push origin master
 

et c'est tout.

Nous partons du principe que mobilexxx est une branche thématique dont le travail n’est pas encore prêt pour votre branche principale. Donc, fusionner en maître uniquement lorsque le support d’équipement mobile est bien placé

51voto

euphoria83 Points 3678

Chaque fois que vous souhaitez obtenir les modifications apportées par le maître à votre branche de travail, effectuez une git rebase <remote>/master . S'il y a des conflits. les résoudre.

Lorsque votre branche de travail est prête, régénérez à nouveau, puis exécutez git push <remote> HEAD:master . Cela mettra à jour la branche principale sur le site distant (rapport central).

9voto

blunderboy Points 5137

Ouais je suis d'accord avec votre approche. Pour fusionner mobiledevicesupport en master, vous pouvez utiliser

git checkout master
git pull origin master //Get all latest commits of master branch
git merge mobiledevicesupport

De même, vous pouvez également fusionner maître dans mobiledevicesupport.

Q. Si la fusion est un problème ou pas.

R. eh Bien, cela dépend de la les commits effectués dans le mobile* la branche et la branche principale de la dernière fois qu'ils ont été synchronisés. Prenez cet exemple: Après la dernière synchronisation, la suite s'engage arriver à ces branches

Master branch: A -> B -> C [where A,B,C are commits]
Mobile branch: D -> E

Maintenant, supposons que commettre B apporté quelques modifications à un fichier a.txt et commettre D a également apporté quelques modifications à a.txt. Laissez-nous jeter un oeil à l'impact de chaque opération de fusion maintenant,

git checkout master //Switches to master branch
git pull // Get the commits you don't have. May be your fellow workers have made them.
git merge mobiledevicesupport // It will try to add D and E in master branch.

Maintenant, il y a deux types de fusion possible

  1. Avance rapide de fusion
  2. Véritable fusion (Nécessite un effort manuel)

Git va d'abord essayer de faire des FF de fusion et si il trouve tous les conflits ne sont pas résolubles par git. Il échoue à la fusion et vous demande de fusion. Dans ce cas, un nouveau commit va se produire, qui est responsable de la résolution des conflits dans a.txt.

Donc la ligne en Bas est de Traverser la fusion n'est pas un problème et en fin de compte que vous avez à faire et c'est ce que la synchronisation des moyens. Assurez-vous de salir vos mains dans la fusion des branches avant de faire quoi que ce soit dans la production.

2voto

faisal Points 627

Vous pensez dans la bonne direction. Fusionner maître avec support d’appareils mobiles de façon continue et fusionner support de personnel avec maître lorsque le support d’appareil mobile est stable. Chaque développeur aura sa propre branche et pourra fusionner sur support principal ou sur support mobile en fonction de son rôle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X