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