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?
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?
Respuestas:
Depende de si está utilizando un log
comando o un diff
comando. En el log
caso, está en la man git-rev-parse
documentación:
Para excluir confirmaciones accesibles desde una confirmación, se utiliza una notación de prefijo ^. Por ejemplo, ^ r1 r2 significa confirmaciones alcanzables desde r2 pero excluye las accesibles desde r1.
Esta operación de configuración aparece con tanta frecuencia que hay una abreviatura para ello. Cuando tiene dos commits r1 y r2 (nombrados de acuerdo con la sintaxis explicada en ESPECIFICAR REVISIONES arriba), puede solicitar commits a los que se pueda acceder desde r2, excepto aquellos a los que se pueda acceder desde r1 mediante "^ r1 r2" y se puede escribir como "r1..r2".
Una notación similar "r1 ... r2" se llama diferencia simétrica de r1 y r2 y se define como "r1 r2 --no $ (git merge-base --todo r1 r2)". Es el conjunto de confirmaciones a las que se puede acceder desde cualquiera de r1 o r2 pero no desde ambas.
Lo que básicamente significa que obtendrá todas las confirmaciones que están en cualquiera de las dos ramas, pero no en ambas.
En el diff
caso, está en la man git-diff
documentación:
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.
Lo cual es un poco confuso. Básicamente significa que muestra solo las diferencias en esa rama en comparación con otra rama: busca el último compromiso común con el primer compromiso que le diste, y luego difunde el segundo compromiso para eso. Es una manera fácil de ver qué cambios se realizan en esa rama, en comparación con esta rama, sin tener en cuenta los cambios solo en esta rama.
El ..
es algo más simple: en el git-diff
caso, es lo mismo que a git diff A B
y solo difiere A contra B. En el log
caso, muestra todas las confirmaciones que están en B pero no en A.
..
y ...
se intercambia exactamente por log y diff: los log A..B
cambios de la base de fusión a B, que es lo que diff A...B
hace
git diff
.
A...B
== A..B + B..A
?
git log
esto es absolutamente sí
Cuando usa los 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
le mostrará todas las confirmaciones que B tiene que A no tiene , mientras que
git log A...B
le mostrará tanto las confirmaciones que a tiene y que B no tiene, y las confirmaciones de que B ha de que A no tiene, o en otras palabras, se filtrará todas las confirmaciones de que ambos A y B comparten, mostrando solo los commits que ambos no comparten .
Aquí hay 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 confirmación, y se resalta en rojo en el diagrama de Venn y se encierra en un círculo en azul en el árbol de confirmación:
Estos son los diagramas para git log A...B
. Observe que los comandos que comparten ambas ramas no son devueltos por el comando:
...
más útilPuede hacer que el rango de confirmación de triple punto sea ...
más útil en un comando de registro utilizando la --left-right
opción 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 el resultado anterior, verá que las confirmaciones a las que pertenecen master
tienen el prefijo <
, mientras que las confirmaciones a las que pertenecen origin/master
tienen el prefijo >
.
Algún día podría agregar mi propia explicación sobre cómo funcionan los rangos de confirmación git diff
, pero por ahora, es posible que desee consultar ¿Cuáles son las diferencias entre doble punto "..." y triple punto "..." en Git diff commit rangos? .