2011-12-15 6 views
64

Al usar git, ¿hay alguna manera de mostrar las confirmaciones hechas a una sucursal, sin tener en cuenta todas las confirmaciones que se generaron al fusionarse?Mostrando confirmaciones hechas directamente a una sucursal, ignorando las fusiones en Git

Estoy tratando de revisar los cambios de código realizados en una rama sin tener en cuenta los que hicimos en otras ramas que se fusionaron. Sé que es casi imposible mostrar una diferencia de esa manera, pero me gustaría para poder averiguar qué compromisos necesito revisar.

Respuesta

90

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

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

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

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

Si desea revisar los cambios que se van a fusionar de nuevo en una rama principal a continuación, lo más fácil de hacer es realizar la combinación en un clon local y luego basta con ver el diff con la primera padre antes de publicar la fusión.

+0

Esta primera orden es excelente en "branch-per-feature adecuado" (https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR) –

+1

Parece que recibo principalmente confirmaciones de esa rama, pero todavía muestra confirmaciones extraídas del maestro. Tenemos tantas ramas que excluir otras sería poco práctico. –

+0

@ChannelCat ¿por qué no volver a establecer la base de su rama en el otro, entonces todas las confirmaciones estarán al final? –

3

Una forma muy hacker:

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

5

Puede utilizar git cherry de eso, va a encontrar que se compromete a que aún no se fusionó con el de aguas arriba, o se compromete a que están en una rama, pero no a la inversa . Así que dado dos ramas llamado "tu-rama" y "maestro":

git cherry -v your-branch master 

que va a presentar la lista de confirmaciones en comparación con su ID de parche:

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

Se puede notar que compromete el prefijo "- "son los que aparecen en ambas ramas, mientras que los que tienen el prefijo" + "solo están disponibles en su sucursal.

Como alternativa, se puede utilizar:

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

que le mostrará la lista de confirmaciones hecho en "su-rama" que aún no están presentes en el "maestro"

Cuestiones relacionadas