Mostrando confirmaciones realizadas directamente en una rama, ignorando fusiones en Git

86

Al usar git, ¿hay alguna manera de mostrar las confirmaciones realizadas en una rama, ignorando todas las confirmaciones que se introdujeron mediante la fusión?

Estoy tratando de revisar los cambios de código realizados en una rama e ignorando los que hicimos en otras ramas que se fusionaron. Sé que es casi imposible mostrar una diferencia de esa manera, pero me gustaría poder hacerlo. averigüe qué confirmaciones necesito revisar.

Canal gato
fuente

Respuestas:

123

--no-merges

Ambos padres tienen el mismo peso en muchos contextos en git. Si siempre ha sido constante en la fusión de otros cambios, puede encontrar que esto le brinda lo que desea.

git log --no-merges --first-parent

De lo contrario, es posible que pueda excluir confirmaciones de otras ramas con nombre.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Si desea revisar los cambios que va a fusionar de nuevo en una rama principal, lo más fácil es realizar la fusión en un clon local y luego mirar la diferencia con el primer padre antes de publicar la fusión.

CB Bailey
fuente
Este primer comando es excelente en la "rama por función adecuada " ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk
1
Parece que la mayoría de las confirmaciones provienen de esa rama, pero todavía se muestran confirmaciones extraídas del maestro. Tenemos tantas sucursales que excluir a otras no sería práctico.
Channel Cat
@ChannelCat, ¿por qué no volver a basar su rama en la otra, entonces todas las confirmaciones estarán al final?
Mark Ingram
7

Puede usar git cherrypara eso, encontrará sus confirmaciones que aún no se fusionaron con el flujo ascendente, o confirmaciones que están en una rama pero no en la otra. Entonces, dadas dos ramas llamadas "your-branch" y "master":

git cherry -v your-branch master

le presentará una lista de confirmaciones en comparación con su id de parche:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Puede observar que las confirmaciones con el prefijo "-" son las que aparecen en ambas ramas, mientras que las que tienen el prefijo "+" están disponibles solo en su rama.

Como alternativa puedes usar:

git log --pretty=format:"%h %s" your-branch..master --no-merges

que le mostrará la lista de confirmaciones realizadas en "su-rama" que aún no están presentes en "master"

jbochniak
fuente
Como mi intento de editar su respuesta fue rechazado, lo publicaré aquí: en su última línea de git, debería haber tres puntos, no dos, entre los nombres de las ramas. Así: tu-rama ... maestro
vedranm
@vedranm No necesitas 3 puntos, solo dos ... aunque 3 funciona de la misma manera que 2 funciona.
Zzzach ...
4

Una forma muy hacker:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
fuente