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 log
ou une commande diff
. Dans le cas log
, c'est dans le man git-rev-parse
Documentation:
Pour exclure les validations accessibles d'une validation, un préfixe ^ est utilisé. Par exemple. ^ r1 r2 signifie que les commits sont joignables à partir de r2 mais excluent ceux qui sont joignables à r1.
Cette opération d'ensemble apparaît si souvent qu'il y a un raccourci pour cela. Lorsque vous avez deux commits r1 et r2 (nommés d'après la syntaxe expliquée dans SPÉCIFICATION DES RÉVISIONS ci-dessus), vous pouvez demander des commits accessibles depuis r2, à l'exclusion de ceux accessibles depuis r1 par "^ r1 r2". "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 - pas $ (git merge-base --all r1 r2)". C'est l'ensemble des commits pouvant être atteints à partir de l'un des deux 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 cas diff
, c'est dans le 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 entre cette branche et une autre branche: il recherche le dernier commit commun avec le premier engagement que vous lui avez donné, puis diffère le deuxième engagement en conséquence. C'est un moyen facile de voir les modifications apportées dans cette branche, par rapport à cette branche, sans prendre en compte les modifications dans cette branche uniquement.
Le ..
est un peu plus simple: dans le git-diff
cas, c'est la même chose qu'un git diff A B
et juste diffs A contre B. Dans le cas log
, il montre tous les commits qui sont dans B mais pas dans A.
Lorsque vous utilisez des plages de validation telles que ..
et ...
avec git log
, la différence entre eux 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 les deux 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 filtrera tous les commits partagés par A et B, montrant ainsi uniquement les commits qu’ils non les deux partagent .
Voici une représentation visuelle de git log A..B
. Les commits que la branche B contient et qui n'existent pas dans A correspondent à ce qui est renvoyé par la plage de validations. Il est surligné en rouge dans le diagramme de Venn et entouré en bleu dans l'arborescence de validation:
Ce sont les diagrammes pour git log A...B
. Notez que les commits qui sont partagés par les deux branches ne sont pas renvoyés par la commande:
...
Plus utileVous pouvez définir la plage de validation à trois points ...
plus utile dans une commande de journal en utilisant le --left-right
option pour montrer quelle commise appartient à 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 que les commits appartenant à master
sont préfixés par <
, tandis que les commits appartenant à Origin/master
sont préfixés par >
.
Un jour, je pourrais ajouter ma propre explication sur la manière dont les plages de validation fonctionnent avec git diff
, mais pour l’instant, vous voudrez peut-être vérifier Quelles sont les différences entre les doubles points ".." et les trois points "..." dans les plages de validation des différences Git? .