web-dev-qa-db-fra.com

Quelles sont les différences entre le double point ".." et le triple point "..." dans les plages de commit 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?

356
Pat Notz

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.

222
Pieter

Utilisation de plages de validation avec le journal Git

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 .

Visualisation avec des diagrammes de Venn et des arbres de validation

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:

"git log A..B" diagramTree 1

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:

"git log A...B" diagramTree 2

Création de la plage de validation à trois points ... Plus utile

Vous 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 >.

Utilisation de plages de validation avec Git Diff

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? .

Voir également

560
user456814