Quelles sont les différences entre le double-point ".."et trois points "..." dans Git diff commettre des plages?

Quelles sont les différences entre les commandes suivantes?:

git diff foo master   # a 
git diff foo..master  # b
git diff foo...master # c

La diff manuel en parle:

la Comparaison des branches

$ git diff topic master    <1>
$ git diff topic..master   <2>
$ git diff topic...master  <3>
  1. Changements entre les conseils du sujet, et le maître de branches.
  2. comme ci-dessus.
  3. changements qui se sont produits sur la branche principale depuis que le sujet branche a été commencé.

mais n'est pas totalement clair pour moi.

139
demandé sur chrisjlee 2011-08-31 04:53:25

4 réponses

puisque j'avais déjà créé ces images, j'ai pensé qu'il pourrait être utile de les utiliser dans une autre réponse, bien que la description de la différence entre .. (point-point) et ... (point-point) est essentiellement la même que dans réponse de manojlds .

la commande git diff typically1 montre seulement la différence entre les états de l'arbre entre exactement deux points dans la propagation graphique. Les notations .. et ... de git diff ont la signification suivante:

An illustration of the different ways of specifying commits for git diff

en d'autres termes, git diff foo..bar est exactement le même que git diff foo bar ; les deux vous montreront la différence entre les pointes des deux branches foo et bar . D'autre part, git diff foo...bar vous montrera la différence entre la" base de fusion "des deux branches et la pointe de bar . La " base de fusion "est généralement la dernière commit en commun entre ces deux branches, donc cette commande vous montrera les changements que votre travail sur bar a introduit, tout en ignorant tout ce qui a été fait sur foo dans l'intervalle.

C'est tout ce que vous devez savoir sur les notations .. et ... dans git diff . Cependant...


... une source commune de confusion est que .. et ... signifient subtilement des choses différentes lorsqu'elles sont utilisées dans une commande telle que git log qui attend un ensemble de commits comme un ou plusieurs arguments. (Ces commandes finissent toutes par utiliser git rev-list pour analyser une liste de commits à partir de leurs arguments.)

la signification de .. et ... pour git log peut être représentée graphiquement comme suit:

An illustration of the different ways of specifying ranges of commits for git log

donc, git rev-list foo..bar vous montre tout sur la branche bar qui n'est pas aussi sur la branche foo . D'autre part, git rev-list foo...bar vous montre toutes les commits qui sont dans foo ou bar , mais pas les deux . Le troisième diagramme montre simplement que si vous listez les deux branches, vous obtenez les commits qui sont dans un seul ou les deux d'entre eux.

Eh bien, je trouve que tout cela un peu confus, quoi qu'il en soit, et je pense que les diagrammes de propagation aident:)

1 je dis seulement" typiquement "car lors de la résolution de conflits de fusion, par exemple, git diff vous montrera une fusion à trois.

233
répondu Mark Longair 2017-05-23 12:26:42

Ma version consolidée de la .. vs ... avec diff vs journal

Diff vs Log & .. vs ..

22
répondu DolphinDream 2017-09-21 13:32:10

git diff foo master Diff entre le haut (la tête) s'engage de foo et maître.

git diff foo..master une Autre façon de faire la même chose.

git diff foo...master Diff à partir de l'ancêtre commun ( git merge-base foo master ) de foo et maître à la pointe de maître. En d'autres termes, montre seulement les changements que la branche principale a introduit depuis son ancêtre commun avec foo.

cet exemple de GitHub explique Quand utiliser le deux:

par exemple, si vous créez une branche ' dev’ et ajoutez une fonction à une fichier, puis revenir à votre branche "maître" et de supprimer une ligne de la Lisez-moi, puis exécuter quelque chose comme ceci:

$ git diff master dev

Il vous dira qu'une fonction a été ajoutée dans le premier fichier et un une ligne a été ajoutée au README. Pourquoi? Parce que sur la branche, le README il a toujours la ligne d'origine, mais sur ' master’ vous l'avez enlevé-donc directement en comparant les instantanés, on dirait que ‘dev ' l'a ajouté.

ce que vous voulez vraiment comparer Est ce que ' dev’ a changé depuis votre les branches divergeaient. Pour ce faire, Git a un joli petit raccourci:

$ git diff master...dev
22
répondu manojlds 2018-04-16 19:58:48
git diff foo master

montrera les différences entre le thème et la branche principale à ce moment-là

git diff foo..master

cela montrera également les différences entre le thème et la branche principale dans ce point dans le temps

git diff foo...master

cela montrera toutes les différences entre quand le sujet a été fait à partir de la branche et après

donc les 2 premières commandes sont les mêmes et la dernière montre une vue plus large dans le diff histoire

6
répondu italiano40 2011-08-31 02:46:28