2012-04-17 15 views
7

Tengo varias ramas y he descubierto una confirmación A que introdujo un error en el sistema. Esto fue subsiguientemente corregido por el compromiso B en una de las ramas y se fusionó con el maestro, pero en ese momento no se seleccionó para todas las ramas infractoras.Mostrar todas las ramas que confirman que A está activado y que la confirmación B no está activada.

Me preguntaba si hay un comando que muestre todas las ramas ofensivas que tienen commit A pero no tienen commit B?

He estado usando el siguiente para determinar que una confirmación existe en una rama

$ git branch -r --contains=A 

pero quiero tratar de añadir a esto incluir algo como

$ git branch -r --contains=A ^--contains=B 

Como nota al margen Lo he comprobado y no hay otros commits que contengan el mismo cambio, es decir, no ha sido seleccionado en ninguna otra rama, pero algunas ramas tienen commit B donde han divergido de master desde la fusión y otros no donde ellos ya existían antes de que el compromiso B fuera intr Oduced

Además, la posibilidad de verificar varias confirmaciones sería útil cuando la confirmación que ha solucionado un problema (confirmación B en este caso) se selecciona en varias ramas que ya ofrecen SHA de confirmación diferente.

Respuesta

3

Has probado esto:

diff <(git branch -r --contains=A) <(git branch -r --contains=B) 

Está lejos de ser perfecto, pero puede ayudar.

+0

Hola, parece que puede estar muy cerca, como dices, no es perfecto. ¿Podría proporcionar algunos detalles sobre lo que sigue 'diff <() <()' – Cellze

+1

Este enlace explica qué 'diff <() <()' hace: http://crashingdaily.wordpress.com/2008/03/ 06/diff-two-stdout-streams/Es posible que solo funcione con BASH. –

+0

El comando 'comm' (es decir,' comm -23') debería ser útil para lo que estás haciendo. – antak

Cuestiones relacionadas