web-dev-qa-db-fra.com

La vue de comparaison Github pour 2 branches est incorrecte?

Quand je fais un vue de comparaison Github entre master et une autre branche A, Github semble comparer la HEAD version de A avec une ancienne version non principale de master.

Je l'ai examiné, et d'après ce que je peux dire, il semble que Github compare la branche A avec un ancêtre commun de master. Ce n'est pas vraiment la comparer à ce qui est actuellement au HEAD du maître.

Existe-t-il un moyen de différencier le HEAD de master contre le HEAD de Branch A dans Github ?

Sinon, pourquoi pas? Cela semble être une fonctionnalité que tout développeur voudrait pouvoir faire. Ou y a-t-il un processus à suivre qui me manque peut-être? J'aimerais pouvoir créer une demande de tirage directement à partir de l'un de ces différences.

EDIT: Voici un exemple de dépôt qui montre le problème

https://github.com/bradparks/test_github_diff_view

  • J'ai créé un nouveau dépôt qui contient un seul fichier, README.md
  • J'ai défini ce fichier pour contenir une seule ligne v100.
  • J'ai ensuite ramifié le maître dans une nouvelle branche A et changé la ligne en `v200 '
  • J'ai ensuite changé la valeur de la branche principale en 'v300', puis j'ai comparé les 2 branches en utilisant le lien de comparaison

    https://github.com/bradparks/test_github_diff_view/compare/A

    et je vois le résultat inattendu suivant. Pourquoi ne diffère-t-il pas de v300 au lieu de v100?

    enter image description here

29
Brad Parks

Existe-t-il un moyen de différencier le HEAD de master contre le HEAD de la branche A dans Github?

septembre 2018 : oui: GitHub prend désormais explicitement en charge " Comparaisons Git diff à trois points et à deux points ". Voir n exemple ici .
keisuke mentionne dans les commentaires a initiative similaire sur Bitbucket .

Réponse originale 2015:

Non: comme mentionné dans " Vue de comparaison GitHub pour les versions actuelles des branches ", GitHub ne prend en charge que la spécification de raccourci de plage de points triples (...).
C'est:

Ce formulaire permet d'afficher les modifications sur la branche contenant et jusqu'à la seconde, en commençant par un ancêtre commun aux deux.

"git diff A...B" Équivaut à "git diff $(git-merge-base A B) B".
Vous pouvez omettre l'un d'entre eux, ce qui a le même effet que d'utiliser HEAD à la place.

aide officielle de GitHub mentionne cette fonctionnalité comme:

L'utilisation la plus courante de Compare consiste à comparer des branches, par exemple lorsque vous lancez une nouvelle demande Pull.

Dans ce scénario, la branche PR démarre à partir du maître (ou devrait être rebasée de toute façon sur le maître), ce qui signifie que maître HEAD est la base entre le maître et la branche PR.

Mais lorsque les deux branches se sont bifurquées, la comparaison n'est plus entre HEADs, mais entre un ancêtre commun et un HEAD: git diff $(git-merge-base master B) B.

Remarque: même si vous deviez spécifier deux SHA1 directement, comme cela est clairement documenté dans " Comparing commits ", cela serait toujours faire une git diff $(git-merge-base A B) B.
Cela ne ferait pas une différence directement entre les deux validations.

24
VonC

Juste une autre pensée. Si vous souhaitez créer une demande d'extraction à partir du différentiel entre votre travail et le chef de la branche principale (selon o.p.), alors ce que vous devez faire est de rebaser d'abord votre propre branche hors de la branche principale git rebase <master>, puis effectuez la demande d'extraction.

Mais vous n'avez généralement pas besoin de le faire, Git est très intelligent avec les fusions et sera normalement en mesure d'ajouter votre travail à la branche principale comme vous le souhaitez, même si vous ne rebasez pas en premier.

1
Mike Beaton

Existe-t-il un moyen de différencier le HEAD de master contre le HEAD de la branche A dans Github?

[ MODIFIER : Non, j'avais tort. J'ai réussi à avoir une URL qui semblait faire la bonne chose et le diff sur la page avait l'air bien, mais c'était un accident. Si vous voulez vraiment en savoir plus, consultez l'historique de cette réponse.]

1
leoger