¿Cuáles son las diferencias entre los siguientes comandos ?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
El manual de diferencias habla de ello:
Comparar ramas
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Cambios entre los consejos del tema y las ramas maestras.
- Lo mismo que arriba.
- Cambios que ocurrieron en la rama maestra desde que se inició la rama del tema.
Pero no está totalmente claro para mí.

..y...engit diffy sus diferentes significados engit log.Respuestas:
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 difftípicamente¹ solo muestra la diferencia entre los estados del árbol entre exactamente dos puntos en el gráfico de confirmación. Las anotaciones..y...engit difftienen los siguientes significados:En otras palabras,
git diff foo..bares exactamente lo mismo quegit diff foo bar; ambos le mostrarán la diferencia entre las puntas de las dos ramasfooybar. Por otro lado,git diff foo...barle mostrará la diferencia entre la "base de fusión" de las dos ramas y la punta debar. 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 quebarha introducido su trabajo , mientras ignora todo lo que se ha hecho mientrasfootanto.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 elgit logque espera un conjunto de confirmaciones como uno o más argumentos. (Todos estos comandos terminan usandogit rev-listpara analizar una lista de confirmaciones de sus argumentos).El significado de
..y...paragit logse puede mostrar gráficamente de la siguiente manera:Entonces,
git rev-list foo..barte muestra todo en la ramabarque no está también en la ramafoo. Por otro lado,git rev-list foo...barmuestra todos los commits que están en unofooobar, 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 diffle mostrará una fusión de tres vías.fuente
git diffdiagramas que haré más adelante...y la...sensación se invierten engit diff( en comparación congit rev-list)!git diff foo..bares exactamente lo mismo quegit diff foo bar; ambos le mostrarán la diferencia entre las puntas de las dos ramas foo y bar". ¿Qué quiere decir exactamente con la "diferencia entre las puntas de las dos ramas"?Mi versión consolidada de .. vs ... con diff vs log
fuente
../...stuff. Por ejemplo, enlog A...Bno está claro si el comando devuelve la intersección (parte blanca del diagrama) o el resto de la unión AB (verde). Sería más adecuado sin operandos establecidos y con solo 1 color.diff A..B<—>log A...B, es decir, realmente difiere con 2 puntos, corresponde al registro con 3 (!) Puntos? ¿O hay un error tipográfico en la imagen? Al observar cómo los puntos están codificados por colores, me parece que hay un error tipográfico en la imagen. La esquina inferior izquierda:log A...Bdebe serlog A..B, derecha (?). Y registro justo a la derecha debe ser...no...git diff foo masterDiferencia entre los compromisos superiores (cabeza) de foo y master.git diff foo..masterOtra forma de hacer lo mismo.git diff foo...masterDifiere del ancestro común (git merge-base foo master) de foo y master a tip of master. En otras palabras, muestra solo los cambios que la rama maestra ha introducido desde su ancestro común con foo.Este ejemplo de GitHub explica cuándo usar los dos:
fuente
mostrará las diferencias entre el tema y la rama maestra en ese momento
esto también mostrará las diferencias entre el tema y la rama maestra en ese momento
Esto mostrará todas las diferencias entre cuándo se hizo el tema desde la rama y después
así que los primeros 2 comandos son los mismos y el último solo muestra una vista más amplia en el historial de diferencias
fuente
La imagen superior es equivalente al árbol gráfico inferior.
Una imagen vale más que mil palabras, la diferencia entre
.....^se muestra a continuación.fuente