GitHub Merge twig ‘master’

J’ai essayé Git et Github après plusieurs années d’utilisation de svn. Je semble avoir les bases bas, mais un élément me déroute.

Pourquoi ce duplicata est-il affiché – à la fois le push de UserA à FileA et les entrées de la twig Fusion sont identiques … la seconde me semble superflue.

Chaque version (“commit”) stockée dans git fait partie d’un graphique, et il est souvent utile de réfléchir à ce que vous faites en termes de ce graphique.

Lorsque UserA commence, supposons qu’il n’y ait eu que deux commits créés, que nous appellerons P et Q :

 P--Q (master) 

Il modifie ensuite FileA, met en scène ce changement et crée un commit qui représente le nouvel état du code source – disons que commit est appelé R Cela a un seul parent, qui est la validation Q :

 P--Q--R (master) 

Après avoir réussi à pousser, le graphe de validation du référentiel GitHub est identique.

UserB a commencé avec la même histoire:

 P--Q (master) 

… mais a créé un commit différent, appelé S , qui a sa version modifiée de FileB:

 P--Q--S (master) 

UserB essaie de transmettre cela à GitHub, mais le push est refusé – à moins que vous ne “forciez” le push, vous n’êtes pas autorisé à mettre à jour une twig distante sauf si la version que vous transmettez inclut tout l’historique de cette twig distante. Donc, UserB tire de GitHub. Un pull se compose de deux étapes: chercher et fusionner. La récupération met à jour l’ origin/master , qui est comme un cache de l’état du master de succursale distant par rapport à l’ origin distante. (Ceci est un exemple de “twig de suivi à distance”.)

 P--Q--S (master) \ R (origin/master) 

L’historique de ce graphique a divergé, de sorte que la fusion essaie d’unifier ces deux historiques en créant une validation de fusion (disons M ) qui a pour parents S et R et, espérons-le, les modifications des deux twigs:

 P--Q--S--M (master) \ / \ / R (origin/master) 

Lorsque GitHub affiche un diff qui représente les modifications introduites par le commit, il est simple dans le cas d’une validation avec un parent – il peut simplement faire un diff de cette version. Cependant, dans le cas d’un commit tel que M , avec plus d’un parent, il doit choisir un parent pour afficher le diff. Cela explique pourquoi le diff affiché pour la validation de fusion M peut sembler être le même que celui affiché pour l’un des S ou R Les validations dans git sont définies par l’état exact de l’arborescence source, et non par les modifications qui ont amené l’arborescence à cet état.