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?
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?
Réponses:
Cela dépend si vous utilisez une log
commande ou une diff
commande. Dans le log
cas, c'est dans la man git-rev-parse
documentation:
Pour exclure les validations accessibles depuis une validation, une notation de préfixe ^ est utilisée. Par exemple, ^ r1 r2 signifie que les commits accessibles depuis r2 mais excluent ceux accessibles depuis r1.
Cette opération d'ensemble apparaît si souvent qu'il y a un raccourci pour cela. Lorsque vous avez deux validations r1 et r2 (nommées selon la syntaxe expliquée dans SPÉCIFICATION DES RÉVISIONS ci-dessus), vous pouvez demander des validations qui sont accessibles à partir de r2 à l'exclusion de celles qui sont accessibles à partir de r1 par "^ r1 r2" et elles peuvent être écrites comme "r1..r2".
Une notation similaire "r1 ... r2" est appelée différence symétrique de r1 et r2 et est définie comme "r1 r2 --not $ (git merge-base --all r1 r2)". C'est l'ensemble des commits qui sont accessibles depuis l'un des r1 ou r2 mais pas des deux.
Ce qui signifie essentiellement que vous obtiendrez tous les commits qui se trouvent dans l'une des deux branches, mais pas dans les deux.
Dans le diff
cas, c'est dans la man git-diff
documentation:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
Ce qui est un peu flou. Fondamentalement, cela signifie qu'il ne montre que les différences dans cette branche par rapport à une autre branche: il recherche le dernier commit commun avec le premier commit que vous lui avez donné, puis diffère le deuxième committish. C'est un moyen facile de voir quels changements sont effectués dans cette branche, par rapport à cette branche, sans prendre en compte les changements dans cette branche uniquement.
Le ..
est un peu plus simple: dans le git-diff
cas, c'est la même chose que a git diff A B
et juste diffère A contre B. Dans le log
cas, il montre tous les commits qui sont en B mais pas en A.
..
et ...
est exactement échangé pour log et diff: log A..B
est le changement de la base de fusion en B, ce qui diff A...B
fait
git diff
.
A...B
== A..B + B..A
?
git log
c'est absolument oui
Lorsque vous utilisez des plages de validation comme ..
et ...
avec git log
, la différence entre elles est que, pour les branches A et B,
git log A..B
vous montrera tous les commits que B a que A n'a pas , tandis que
git log A...B
vous montrera à la fois les validations que A a et que B n'a pas, et les validations que B a que A n'a pas, ou en d'autres termes, il filtrera toutes les validations que A et B partagent, montrant uniquement les engagements qu'ils ne partagent pas tous les deux .
Voici une représentation visuelle de git log A..B
. Les validations que contient la branche B qui n'existent pas dans A sont ce qui est retourné par la plage de validation, et sont surlignées en rouge dans le diagramme de Venn, et entourées en bleu dans l'arborescence de validation:
Ce sont les diagrammes pour git log A...B
. Notez que les commits partagés par les deux branches ne sont pas renvoyés par la commande:
...
plus utileVous pouvez rendre la plage de validation à trois points ...
plus utile dans une commande de journal en utilisant l' --left-right
option pour afficher les validations appartenant à quelle branche:
$ 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 les validations qui appartiennent à master
sont préfixées avec <
, tandis que les validations qui appartiennent à origin/master
sont préfixées avec >
.
Un jour, je pourrais ajouter ma propre explication sur le fonctionnement des plages de validation git diff
, mais pour l'instant, vous voudrez peut-être vérifier quelles sont les différences entre le double point ".." et le triple point "..." dans Git diff commit gammes? .