Git: Cómo listar confirmaciones en esta rama pero no de ramas fusionadas

90

Suponga que su historial de git commit se ve así:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

¿Es posible que git enumere solo las confirmaciones en el maestro, AF? En otras palabras, si la confirmación estaba en una rama fusionada, no quiero que se muestre.

wch
fuente
2
Entonces, ¿cómo sabría git cuál de Dy Zera parte de la rama fusionada?
Romain
2
Cuando se fusionan desde el maestro, las confirmaciones maestras anteriores son los primeros padres en la combinación. git logpermite mostrar solo las confirmaciones con --first-parent, para que obtenga las cosas correctas
CharlesB

Respuestas:

133

git logtiene la opción --first-parent, por lo que no obtendrá el topichistorial.

Cuando se fusionan desde master, las masterconfirmaciones son los primeros padres en fusionar. El registro de Git permite mostrar solo aquellas confirmaciones con --first-parent, para que obtenga las cosas correctas.

CharlesB
fuente
25
+1 lo --first-parenthace :) combinado con --no-mergesusted puede ocultar las confirmaciones de fusión
c00kiemon5ter
Voté a favor, pero todavía parece excesivo en comparación con mi respuesta
UpAndAdam
22

TLDR : git log origin/master --no-mergesle dará un registro de maestro y excluirá cualquier compromiso combinado (en este caso x, y, z)

Puntos originales

Hay otra forma general de hacer esto que no depende de --first-parentcuál será útil en ciertas situaciones ... usando los filtros de exclusión de rama

git log origin/topic ^origin/master Esto le dará un registro origin/topiccon todas origin/masterlas confirmaciones eliminadas.

También puede agregar --no-mergesque ocultará las confirmaciones de fusión que puede que desee o no.

Otro consejo útil es utilizar en shortloglugar de lo logque le dará más de un resumen abreviado que puede ser útil para las notas de la versión o la comunicación de lo que hay en una rama.

Actualización
Después de volver a leer esto, en realidad querrás casi lo contrario de lo que publiqué; sin embargo, terminaría excluyendo todo lo que está en master y foo ( git log origin/master ^origin/foo). Sin embargo, también puede obtener lo que solicita (ocultar todas las confirmaciones que forman parte de las fusiones) congit log origin/master --no-merges

UpAndAdam
fuente
0

La respuesta de Charles funciona para mí.

git log has option --first-parent --no-merges, so you won't get topic history.

Pero si está utilizando una interfaz gráfica de usuario para sus actividades de Git como, Git Extension, SourceTree, Tortoise Git,

Luego, hay opciones directas para verificar el primer padre en sus herramientas. Pensé en agregar esta respuesta a la lista, ya que la mayoría de las personas encuentran fácil la interfaz gráfica. y Puede seleccionar directamente todas las confirmaciones de esa rama en particular de la herramienta, si es necesario.

He adjuntado el ejemplo de dos herramientas. Sería similar para otras herramientas también: [He borrado el nombre de usuario, el nombre del repositorio de git ya que este es un repositorio privado, pero aún puedes tener una idea de cómo usar el primer padre de las herramientas ]

  1. Extensión de Git
    • Abra la extensión de Git -> Verifique la rama de características en la que desea ver las confirmaciones, hay una opción para seleccionar las primeras confirmaciones como se muestra en la imagen:

ingrese la descripción de la imagen aquí

  1. Tortuga Git
    • Abra la carpeta del repositorio -> Haga clic en Mostrar registros de Tortoise Git -> Verifique la rama y seleccione las primeras confirmaciones como se muestra en la imagen

ingrese la descripción de la imagen aquí

KushalSeth
fuente
-3

¿No funciona esto?

git log master
git log --stat master
Stefan Kendall
fuente
No, esos no funcionan. El compromiso de fusión tiene dos padres; todo el seguimiento de ambos padres está en la rama 'maestra'.
GoZoner