2010-08-04 13 views
74

Je viens de commencer à utiliser GIT et je pense que c'est merveilleux, mais je suis un peu confus sur ce que fait la commande merge. Disons que nous avons un projet en cours dans la branche "A".Fusionner 2 branches ensemble dans GIT

Je rentre à la maison et apporter des modifications à cette branche et l'enregistrer comme "B". Un autre programmeur modifie "A" et l'enregistre comme "C".

Existe-t-il un moyen de fusionner les deux branches "B" et "C" ensemble, puis valider les modifications comme une nouvelle branche, dites "D"?

Ou le point de 'fusionner' me manque?

+0

pas besoin d'enregistrer les modifications dans une autre branche. travailler un A et ensuite fusionner ces différents A ensemble – knittl

+0

Je ne suis pas. A serait sur mon ordinateur local, dev1 aurait une copie de A sur son ordinateur, et dev2 a une copie de A sur son ordinateur. Les deux développeurs font des changements, comment puis-je fusionner ces changements ensemble? – dotty

+0

voir . les devs doivent probablement pousser/télécharger leur dépôt quelque part d'abord – knittl

Répondre

127

merge est utilisé pour réunir deux (ou plus) branches.

un petit exemple:

# on branch A: 
# create new branch B 
$ git checkout -b B 
# hack hack 
$ git commit -am "commit on branch B" 

# create new branch C from A 
$ git checkout -b C A 
# hack hack 
$ git commit -am "commit on branch C" 

# go back to branch A 
$ git checkout A 
# hack hack 
$ git commit -am "commit on branch A" 

maintenant il y a trois branches distinctes (à savoir AB et C) avec différentes têtes

pour obtenir les changements de B et C retour à A, la caisse A (déjà fait dans cet exemple), puis utilisez la commande de fusion:

# create an octopus merge 
$ git merge B C 

votre histoire sera alors ressembler à quelque chose comme ceci:

Si vous souhaitez fusionner entre les bordures du référentiel/de l'ordinateur, consultez la commande git pull, par ex. à partir de l'ordinateur avec la branche A (cet exemple va créer deux nouveaux commits):

# pull branch B 
$ git pull ssh://host/… B 
# pull branch C 
$ git pull ssh://host/… C 
+0

J'ai eu une erreur de "conflit de contenu" lors de la fusion des branches. – dotty

+0

cela signifie que les deux branches ont changé le même morceau de code. corrigez les conflitscs, 'git add conflicting_files' et ensuite' git commit' – knittl

+0

Dites le fichier dans A contenait le mot "bonjour", le A l'a modifié pour "BONJOUR" et B l'a modifié pour "Bonjour tout le monde". Quel serait le résultat de la fusion de ces fichiers? – dotty

Questions connexes