Quelles sont les différences entre «..» à double point et «…» à sortingple point dans les plages de validation Git?

Certaines commandes Git prennent des plages de validation et une syntaxe valide consiste à séparer deux noms de validation avec deux points .. et une autre syntaxe utilise trois points ...

Quelles sont les différences entre les deux?

Cela dépend si vous utilisez une commande de log ou une commande diff . Dans le cas du log , c’est dans la documentation de man git-rev-parse :

Pour exclure les commits accessibles depuis un commit, une notation préfixe ^ est utilisée. Par exemple, ^ r1 r2 signifie des commits accessibles depuis r2 mais exclut ceux accessibles depuis r1.

Cette opération définie apparaît si souvent qu’il existe un raccourci pour cela. Lorsque vous avez deux commits r1 et r2 (nommés selon la syntaxe expliquée dans SPECIFYING REVISIONS ci-dessus), vous pouvez demander des commits accessibles à partir de r2, à l’exception de ceux accessibles depuis r1 par “^ r1 r2”. “r1..r2”.

Une notation similaire “r1 … r2” est appelée différence symésortingque de r1 et r2 et est définie comme “r1 r2 – non $ (git merge-base –all r1 r2)”. C’est l’ensemble des commits accessibles depuis l’un des r1 ou r2 mais pas depuis les deux.

Ce qui signifie essentiellement que vous obtiendrez tous les commits qui se trouvent dans l’une des deux twigs, mais pas dans les deux.

Dans le cas diff , c’est dans la documentation de man git-diff :

  git diff [--options] ... [--] [...] This form is to view the changes on the branch containing and up to the second , starting at a common ancestor of both . "git diff A...B" is equivalent to "git diff $(git-merge-base AB) B". You can omit any one of , which has the same effect as using HEAD instead. 

Ce qui est un peu flou. Fondamentalement, cela signifie qu’il affiche uniquement les différences dans cette twig par rapport à une autre twig: il recherche le dernier commit commun avec le premier engagement que vous lui avez donné, puis diffère le second engagement à celui-ci. C’est un moyen facile de voir les modifications apscopes à cette twig, par rapport à cette twig, sans prendre en compte les modifications apscopes à cette twig uniquement.

Le .. est un peu plus simple: dans le cas de git-diff , il est identique à un git diff AB et diffère simplement de A à B. Dans le cas du log , il montre tous les commits qui sont dans B mais pas dans A.

Utilisation de plages de validation avec Git Log

Lorsque vous utilisez des plages de validation comme .. et ... avec git log , la différence entre elles est que, pour les twigs A et B,

 git log A..B 

vous montrera tous les engagements que B a que A n’a pas , tout en

 git log A...B 

va vous montrer à la fois les commits que A a et que B n’a pas, et les commits que B a que A n’a pas, ou en d’autres termes, il va filtrer tous les commits que les deux A et B partagent, montrant ainsi uniquement les engagements qu’ils ne partagent pas tous les deux .

Visualisation avec des diagrammes de Venn et des arbres de validation

Voici une représentation visuelle de git log A..B . Les commits que contient la twig B qui n’existent pas dans A sont ceux renvoyés par la plage de validation et sont mis en évidence en rouge dans le diagramme de Venn et entourés en bleu dans l’arborescence de validation:

Arbre 1

Ce sont les diagrammes pour git log A...B Notez que les commits partagés par les deux twigs ne sont pas renvoyés par la commande:

Diagramme Arbre 2

Rendre la gamme Triple-Dot Commit ... plus utile

Vous pouvez rendre la plage de validation sortingple-point plus utile dans une commande de journal en utilisant l’option --left-right pour afficher les commits qui appartiennent à quelle twig:

 $ git log --oneline --decorate --left-right --graph master...origin/master < 1794bee (HEAD, master) Derp some more > 6e6ce69 (origin/master, origin/HEAD) Add hello.txt 

Dans la sortie ci-dessus, vous verrez que les commits qui appartiennent à master sont préfixés par < , alors que les commits qui appartiennent à origin/master sont préfixés par > .

Utilisation de plages de validation avec Git Diff

Un jour, je pourrais append ma propre explication sur la façon dont les plages de validation fonctionnent avec git diff , mais pour le moment, vous voudrez peut-être vérifier quelles sont les différences entre les ".." à double point et "..." diff marque les plages? .

Voir également

  • Pro Git § 6.1 Outils Git - Sélection de révision - Plages de validation