web-dev-qa-db-fra.com

Git diff entre la branche actuelle et le maître, mais n'inclut pas les commits maîtres non fusionnés

Je veux un diff de tous les changements dans une branche qui n'est pas encore fusionné pour être maîtrisé.

J'ai essayé:

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

Cependant, dans chacun de ces cas, le diff contient un contenu dans le maître qui n'a pas encore été fusionné dans ma branche.

Existe-t-il un moyen de faire un diff entre ma branche et mon maître en excluant les modifications dans le maître qui n'ont pas encore été fusionnées?

135
pillarOfLight
_git diff `git merge-base master branch`..branch
_

base de fusion est le point où branch a divergé de master.

Git diff supporte une syntaxe spéciale pour ceci:

_git diff master...branch
_

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

Relativement lié:


Notez que la syntaxe _.._ et _..._ ne possède pas la même sémantique que dans les autres outils Git. Il diffère de la signification spécifiée dans _man gitrevisions_.

Citant man git-diff :

  • _git diff [--options] <commit> <commit> [--] [<path>…]_

    Ceci permet d'afficher les modifications entre deux _<commit>_ arbitraires __.

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

    Cela est synonyme de la forme précédente. Si _<commit>_ d'un côté est omis, cela aura le même effet que d'utiliser HEAD à la place.

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

    Ce formulaire permet d’afficher les modifications apportées à la branche contenant et jusqu’à la deuxième _<commit>_, en partant d’un ancêtre commun aux deux _<commit>_. "_git diff A...B_" équivaut à "git diff $(git-merge-base A B) B". Vous pouvez omettre n'importe lequel de _<commit>_, ce qui revient au même que d'utiliser HEAD à la place.

Juste au cas où vous feriez quelque chose d'exotique, il convient de noter que tous les _<commit>_ de la description ci-dessus, à l'exception des deux derniers formulaires qui utilisent des notations "..", peuvent être n'importe quel _<tree>_ .

Pour une liste plus complète des manières d'épeler _<commit>_, voir la section "SPÉCIFICATION DE RÉVISIONS" dans gitrevisions[7] . Toutefois, "diff" consiste à comparer deux extrémités, et non des plages, et les notations de plage ("_<commit>..<commit>_" et "_<commit>...<commit>_") ne signifient pas une plage telle que définie dans la section "SPECIFYING RANGES" de gitrevisions[7] .

182
Palec

Voici ce qui a fonctionné pour moi:

git diff Origin/master...

Cela montre uniquement les modifications entre la branche locale actuellement sélectionnée et la branche principale distante, et ignore toutes les modifications dans la branche locale provenant des validations de fusion.

26
Jeshurun

Comme le notent également John Szakmeister et VasiliNovikov, la commande la plus courte pour obtenir la diff complète du point de vue du maître sur votre branche est la suivante:

git diff master...

Ceci utilise votre copie locale du maître.

Exemple de sortie:

Example usage

4
Andrew Schreiber