2010-05-21 5 views
2

Désolé si c'est une question stupide avec juste une réponse oui/non, mais si je comprends bien, dans git une branche est juste un pointeur vers un commit. Cela n'implique-t-il pas qu'une fois que vous avez fusionné deux branches, git ne sait pas lequel a pointé sur quel ensemble de commits?Est-ce que git sait quelle branche est qui après une fusion?

Avant

A---B---C---D---E <- X 
\     
    1----2----3----4 <- Y 

Après

A---B---C---D---E--M <-X & Y 
\    /
    1----2----3----4 
+0

Après une seule fusion, une seule des branches pointerait vers M. Il est possible d'organiser la topologie que vous avez illustrée, mais cela impliquerait une autre fusion, une réinitialisation ou une branche git, une force, etc. "Qui a pointé à quel ensemble de commits" n'est pas quelque chose que Git enregistre. J'ai lu que Mercurial enregistre le nom de la branche dans une validation, mais Git ne le fait pas (sauf lorsqu'il enregistre le nom d'une branche fusionnée dans le message de validation d'une validation de fusion). Pour enregistrer le (s) nom (s) d'une validation, vous pouvez utiliser des tags supplémentaires, des branches ou des notes * git * (dans Git> = 1.6.6). –

Répondre

9

Si je me souviens bien vous fusionnez une branche dans un autre, comme feature1 en maître, alors maître pointe maintenant fusionner-commit mais feature1 les points encore où il pointait avant.

Edité par Jefromi: C'est correct. Les images doivent ressembler à ceci:

git checkout branch X 

    A---B---C---D---E branchX (HEAD) 
    \     
     1----2----3----4 branchY 

git merge branchY 

    A---B---C---D---E--M branchX (HEAD) 
    \    /
     1----2----3----4 branchY 
+0

Yup - vous fusionnez une branche dans une autre. Donc, quelle que soit la branche sur laquelle vous étiez lorsque vous avez émis la commande de fusion sera la branche en cours après la fusion. – bergyman

+0

@Jefromi ok, alors que se passe-t-il si je fais un rebase puis fusionner, comme suggéré ici (http://stackoverflow.com/questions/804115/git-rebase-vs-git-merge/804178#804178)? – Benjol

+0

@Benjol Vous pouvez consulter le livre de la communauté Git sur http://book.git-scm.com/index.html si vous êtes intéressé par son fonctionnement interne, mais en résumé, ni rebasing ni fusion ne change la position de toute branche autre que la branche actuelle. Quoi que git fasse, il ne supprimera ou ne changera AUCUN commit existant (sauf si vous exécutez des trucs comme 'git gc', etc). Tout ce qu'il fait est de créer de nouveaux commits (même pour rebaser), il n'est donc pas nécessaire de changer d'autres branches. – Interarticle

1

La fusion de branches ne fusionne pas réellement l'adresse de l'autre branche; il fusionne le contenu de l'autre branche dans le courant.