Je veux un 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.
Existe-t-il un moyen de faire une différence entre ma branche et mon maître qui exclut les changements de maître qui n'ont pas encore été fusionnés dans ma branche?
git diff master..branch
. Vous pouvez le raccourcirgit diff master..
si vous êtes en succursale. Lar1..r2
syntaxe est courte pour^r1 r2
ce qui signifie "montre-moi tout ce qui descendr2
et n'est pas accessibler1
".git help gitrevisions
contient des informations sur les différentes syntaxes que vous pouvez utiliser....
syntaxe degit diff
. Votre commentaire est faux, @jszakmeister, car les plages de révision telles que décrites dansgitrevisions
n'ont rien à voir avecgit diff
. Diff compare deux points de l'histoire, ne peut pas fonctionner avec une plage.git diff
fonctionne différemment des autres commandes ... un fait que je trouve frustrant. :-(Réponses:
La base de fusion est le point d'où la
branch
divergencemaster
.Git diff prend en charge une syntaxe spéciale pour cela:
Vous ne devez pas échanger les côtés, car vous obtiendriez alors l'autre branche. Vous voulez savoir ce qui a changé
branch
depuis qu'il a divergémaster
, et non l'inverse.Relativement vaguement:
Notez que la syntaxe
..
et...
n'a pas la même sémantique que dans les autres outils Git. Il diffère de la signification spécifiée dansman gitrevisions
.Citant
man git-diff
:la source
$ git diff master...branch
produitfatal: ambiguous argument 'master...branch': unknown revision or path not in the working tree.
- est-ce une commande dépendante de la version?branch
. J'ai choisi de m'en tenir au nom que l'OP avait choisi dans la question. Si vous souhaitez utiliser la branche actuelle, remplacez-labranch
parHEAD
.git diff master...
pour éviter de spécifier la branche (la branche actuelle sera prise).devel
extraction, @ChrisGuest? Probablement, Git a créé la branche pour vous lors du paiement, en tant que copie locale d'une branche distante (généralementorigin/devel
). Si tel était le cas,git diff origin/devel...bugfix/API-353-api-allows-database-access-when
aurait fonctionné avant même le paiement.Voici ce qui a fonctionné pour moi:
Cela montre uniquement les changements entre ma branche locale actuellement sélectionnée et la branche principale distante, et ignore tous les changements dans ma branche locale qui proviennent des commits de fusion.
la source
git cherry origin/master
.master
peut que vous ayez rebasé un ensemble de commits sous vous.Comme l'ont également noté John Szakmeister et VasiliNovikov, la commande la plus courte pour obtenir la différence complète du point de vue du maître sur votre branche est:
Cela utilise votre copie locale de master.
Pour comparer une utilisation de fichier spécifique:
Exemple de sortie:
la source