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

Resuelto chrisjlee asked hace 13 años • 5 respuestas

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

Comparando sucursales

$ git diff topic master    <1>
$ git diff topic..master   <2>
$ git diff topic...master  <3>
  1. Cambios entre los consejos del tema y las ramas maestras.
  2. Lo mismo que arriba.
  3. Cambios que ocurrieron en la rama maestra desde que se inició la rama temática.

pero no me queda del todo claro.

chrisjlee avatar Aug 31 '11 07:08 chrisjlee
Aceptado

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 diffnormalmente¹ solo muestra la diferencia entre los estados del árbol entre exactamente dos puntos en el gráfico de confirmación. Las notaciones ..y en tienen los siguientes significados:...git diff

# Left side in the illustration below:
git diff foo..bar
git diff foo bar  # same thing as above

# Right side in the illustration below:
git diff foo...bar
git diff $(git merge-base foo bar) bar  # same thing as above

Una ilustración de las diferentes formas de especificar confirmaciones para git diff

En otras palabras, git diff foo..bares exactamente igual que git diff foo bar; ambos te mostrarán la diferencia entre las puntas de las dos ramas fooy bar. Por otro lado, git diff foo...barte mostrará la diferencia entre la "base de unió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 ha barintroducido su trabajo, ignorando todo lo que se ha hecho foomientras tanto.

Eso es todo lo que necesitas saber sobre las notaciones ..y ...en git diff. Sin embargo...


... una fuente común de confusión aquí es que ..significa ...cosas sutilmente diferentes cuando se usa en un comando como git logel que espera un conjunto de confirmaciones como uno o más argumentos. (Todos estos comandos terminan utilizándose git rev-listpara analizar una lista de confirmaciones a partir de sus argumentos).

El significado de ..y ...para git logse puede mostrar gráficamente a continuación:

Una ilustración de las diferentes formas de especificar rangos de confirmaciones para git log

Entonces, git rev-list foo..barle muestra todo lo que hay en la rama barque no está también en la rama foo. Por otro lado, git rev-list foo...barte muestra todas las confirmaciones que están en cualquiera de los dos foo o bar , pero no en ambos . El tercer diagrama simplemente muestra que si enumera las dos ramas, obtendrá las confirmaciones que están en una o en ambas.

Bueno, de todas formas todo esto me parece un poco confuso y creo que los diagramas de gráficos de confirmación ayudan :)

¹ Sólo digo "típicamente" ya que al resolver conflictos de fusión, por ejemplo, git diffte mostrará una fusión de tres vías.

Mark Longair avatar Aug 31 '2011 11:08 Mark Longair

Mi versión consolidada del ..vs ...con diff vs log

Diferencia frente a registro y .. frente a ..

DolphinDream avatar Sep 21 '2017 13:09 DolphinDream