Como ya había creado estas imágenes, pensé que valdría la pena usarlas en otra respuesta, aunque la descripción de la diferencia entre ..
(punto-punto) y ...
(punto-punto-punto) es esencialmente la misma que en la respuesta de manojlds .
El comando git diff
típicamente¹ solo muestra la diferencia entre los estados del árbol entre exactamente dos puntos en el gráfico de confirmación. Las anotaciones ..
y ...
en git diff
tienen los siguientes significados:
En otras palabras, git diff foo..bar
es exactamente lo mismo que git diff foo bar
; ambos le mostrarán la diferencia entre las puntas de las dos ramas foo
y bar
. Por otro lado, git diff foo...bar
le mostrará la diferencia entre la "base de fusión" de las dos ramas y la punta de bar
. La "base de fusión" suele ser la última confirmación en común entre esas dos ramas, por lo que este comando le mostrará los cambios que bar
ha introducido su trabajo , mientras ignora todo lo que se ha hecho mientras foo
tanto.
Eso es todo lo que necesita saber sobre las anotaciones ..
y . Sin embargo......
git diff
... una fuente común de confusión aquí es eso ..
y ...
significa cosas sutilmente diferentes cuando se usa en un comando como el git log
que espera un conjunto de confirmaciones como uno o más argumentos. (Todos estos comandos terminan usando git rev-list
para analizar una lista de confirmaciones de sus argumentos).
El significado de ..
y ...
para git log
se puede mostrar gráficamente de la siguiente manera:
Entonces, git rev-list foo..bar
te muestra todo en la rama bar
que no está también en la rama foo
. Por otro lado, git rev-list foo...bar
muestra todos los commits que están en uno foo
o bar
, pero no en ambos . El tercer diagrama solo muestra que si enumera las dos ramas, obtiene las confirmaciones que están en una o en ambas.
Bueno, creo que todo es un poco confuso, de todos modos, y creo que los diagramas de gráficos de confirmación ayudan :)
¹ Solo digo "típicamente" ya que al resolver conflictos de fusión, por ejemplo, git diff
le mostrará una fusión de tres vías.
..
y...
engit diff
y sus diferentes significados engit log
.