Git diff entre la branche courante et le maître, mais hors maître non fusionné

je veux une diff de tous les changements dans une branche qui n'est pas encore fusionnée à master.

j'ai essayé:

git diff master
git diff branch..master
git diff branch...master

cependant, dans chacun de ces cas, le diff contient du contenu dans master qui n'a pas encore été fusionné dans ma branche.

y a-t-il un moyen de faire une différence entre ma branche et le maître qui exclut les changements dans le maître qui n'ont pas encore été fusionnés dans ma branche?

94
demandé sur Palec 2013-12-28 02:50:28

2 réponses

git diff `git merge-base master branch`..branch

base de fusion est le point où branch divergeait de master .

git diff supporte une syntaxe spéciale pour ceci:

git diff master...branch

vous ne devez pas échanger les côtés parce qu'alors vous obtiendriez l'autre branche. Vous voulez savoir ce qui a changé dans branch puisqu'il a divergé de master , pas l'inverse.

vaguement related:


notez que la syntaxe .. et ... n'a pas la même sémantique que dans les autres outils Git. Elle diffère de la signification spécifiée dans man gitrevisions .

citant man git-diff :

  • git diff [--options] <commit> <commit> [--] [<path>…]

    c'est pour voir les changements entre deux <commit> arbitraires .

  • git diff [--options] <commit>..<commit> [--] [<path>…]

    c'est synonyme de la forme précédente. Si <commit> sur un côté est omis, il aura le même effet que l'utilisation de HEAD à la place.

  • git diff [--options] <commit>...<commit> [--] [<path>…]

    ce formulaire est pour voir les changements sur la branche contenant et jusqu'à la deuxième <commit> , à partir d'un ancêtre commun des deux <commit> . " git diff A...B "est équivalent à" git diff $(git-merge-base A B) B ". Vous pouvez omettre n'importe lequel de <commit> , qui a le même effet que d'utiliser HEAD à la place.

Juste au cas où si vous faites quelque chose d'exotique, il convient de noter que tous les <commit> dans la description ci-dessus, sauf dans les deux derniers formulaires qui utilisent ".."notations, peut être n'importe quel <tree> .

pour une liste plus complète des moyens d'épeler <commit> , voir la section" spécification des révisions " dans gitrevisions[7] . Toutefois, "diff" consiste à comparer deux paramètres, et non des fourchettes, et les notations des fourchettes (" <commit>..<commit> " et " <commit>...<commit> ") ne signifient pas une fourchette telle que définie dans la Section "spécifier des plages" dans gitrevisions[7] .

139
répondu Palec 2017-05-23 12:03:05

voici ce qui a fonctionné pour moi:

git diff origin/master...

cela montre seulement les changements entre ma branche locale actuellement sélectionnée et la branche master distante, et ignore tous les changements dans ma branche locale qui proviennent de commits merge.

4
répondu Jeshurun 2018-06-04 21:07:51