2010-03-13 5 views
4

Je lis l'article suivant: http://github.com/guides/keeping-a-git-fork-in-sync-with-the-forked-repo, où ils mentionnent tirant essentiellement des changements de deux prises en pension en même temps en créant l'alias suivant:Git fusion commande

pu = !"git fetch origin -v; git fetch wycats -v; git merge wycats/master" 

Cela est logique, mais, comme quelqu'un de nouveau à Git, je suis curieux de savoir pourquoi les commandes est que par rapport:

pu = !"git fetch origin -v; git merge origin/master; git fetch wycats -v; git merge wycats/master" 

ou quelque chose le long de ces lignes. Fondamentalement, je me demande pourquoi l'argument de fusionner est wycats/master et comment il connaît automatiquement l'origine/master. Vous cherchez une explication rapide.

+0

L'article original est probablement erroné. 'git merge' ne sait pas automatiquement chercher' origin/master'. Autant que je sache, ce devrait être comme vous le suggérez, ou la dernière commande de l'original devrait être 'git merge origin/master wycats/master' pour faire une fusion de poulpe des deux branches dans la branche courante. –

+0

C'est aussi ici: http://yuilibrary.com/gallery/developer, où je l'ai vu à l'origine. Est-ce que git fusionne origine/maître wycats/maître fonctionne également? Je n'ai pas essayé ça. – Bialecki

Répondre

2

Je ne sais pas pourquoi une fusion octopus aurait lieu ici (msysgit1.6.5 dans une session DOS).
Une pieuvre est pour une fusion avec plusieurs parents.

Si je suis la routine de « deux modifications pour repo à distance pour retirer », voici ce que je vois avant la fusion finale (après un tour de traction):

alt text

chgB (de principal, c'est "origine") et chgA (de la distance "mainA") ont été fusionnés un par un dans master.

Deux autres modifications ont été apportées et récupérées: chgB2 d'origine et chgA2 de mainA.

Si j'essaie de ne fusionner mainA/master, je termine avec:

alt text

chgA2 a été fusionné. chgB2 de « principal » (origine) est toujours traîner là ...

Mais si je tente un changement supplémentaire dans mainA, et précise les prises en pension à distance dans la commande de fusion, puis une fusion de poulpe a lieu:

C:\Prog\Git\tests\octo\dest1>git merge origin/master mainA/master 
Trying simple merge with 9e3e16d8e75cec3be621c47fb72e955cc2574f0f 
Trying simple merge with 4dfb282a31d5bafddb244c84b66ede41e28f1042 
Merge made by octopus. 
a.txt | 2 +- 
b.txt | 3 +-- 
2 files changed, 2 insertions(+), 3 deletions(-) 

alt text