¿Cuáles son las diferencias entre el doble punto ".."y triple punto"? " en los rangos de confirmación de Git?


Algunos comandos de Git toman rangos de confirmación y una sintaxis válida es separar dos nombres de confirmación con dos puntos .., y otra sintaxis usa tres puntos ....

¿Cuáles son las diferencias entre los dos?

Author: Pat Notz, 2009-01-20

2 answers

Depende de si estás usando un comando log o un comando diff. En el caso log, está en la documentación man git-rev-parse:

Para excluir confirmaciones accesibles desde una confirmación, se usa un prefijo ^ notación. Por ejemplo, ^r1 r2 significa confirmaciones alcanzables desde r2 pero excluye las alcanzables desde r1.

Esta operación de conjunto aparece muy a menudo que hay una abreviatura para ello. Cuando tiene dos confirmaciones r1 y r2 (nombradas de acuerdo con la sintaxis explicada en ESPECIFICAR REVISIONES anteriores), puede solicitar confirmaciones que son accesibles de r2 excluyendo los que son accesible desde r1 por "^r1 r2 " y se puede escribir como " r1..r2".

Una notación similar "r1...r2" es llamada diferencia simétrica de r1 y r2 y se define como "r1 r2 --no git (git merge-base all all r1 r2)". Es el conjunto de confirmaciones que son accesible desde uno de r1 o r2 pero no de ambos.

Lo que básicamente significa que obtendrás todo confirmaciones que están en cualquiera de las dos ramas, pero no en ambas.

En el caso diff, está en la documentación man git-diff:

  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.

Que es un poco borroso. Básicamente significa que muestra solo las diferencias en esa rama en comparación con otra rama: busca el último commit común con el primer committish que le diste, y luego difunde el segundo committish a eso. Es una manera fácil de ver qué cambios se realizan en esa rama, en comparación con esta rama, sin tomar nota de los cambios en esta rama solamente.

El .. es algo más simple: En el caso git-diff, es lo mismo que a git diff A B y solo diffs A contra B. En el caso log, muestra todas las confirmaciones que están en B pero no en A.

 201
Author: Pieter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-08 15:21:30

Usando rangos de confirmación con Git Log

Cuando estás usando rangos de confirmación como .. y ... con git log, la diferencia entre ellos es que, para las ramas A y B,

git log A..B

Te mostrará todas las confirmaciones que B tiene que A no tiene , mientras que

git log A...B

Mostrará ambos el se compromete a que Una tiene y que B no tiene, y el cometa que B tiene que no tiene, o en otras palabras, va a filtrar todos los commits que tanto A como B comparten, por lo tanto solo muestran los commits que no ambos comparten.

Visualización con diagramas de Venn y Árboles de confirmación

Aquí está una representación visual de git log A..B. Las confirmaciones que contiene la rama B que no existen en A es lo que devuelve el rango de confirmaciones, y está resaltado en rojo en el diagrama de Venn, y rodeado en azul en el árbol de confirmaciones:

 "git log A..B " diagramaÁrbol 1

Estos son los diagramas de git log A...B. Note que las confirmaciones que son compartido por ambas ramas no son devueltos por el comando:

 "git log A...B " diagramaÁrbol 2

Haciendo que el Rango de Confirmación de Triple Punto ... Sea más Útil

Puede hacer que el rango de confirmación de triple punto ... sea más útil en un comando de registro usando la opción --left-right para mostrar qué confirmaciones pertenecen a qué rama:

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

En la salida anterior, verás que las confirmaciones que pertenecen a master tienen el prefijo <, mientras que las confirmaciones que pertenecen a origin/master tienen el prefijo >.

Usando rangos de confirmación con Git Diff

Algún día podría agregar mi propia explicación de cómo funcionan los rangos de confirmación con git diff, pero por ahora, es posible que desee comprobar Cuáles son las diferencias entre el doble punto ".."and triple-dot "(en inglés)..."in Git diff commit ranges?.

Véase también

 460
Author: Community,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:09