ver git log of commits entre master y live branch

He estado buscando Stackoverflow y otros foros para encontrar la respuesta en vano, nada parece encajar con lo que estoy buscando.

Entonces, el problema es el siguiente: tengo una twig maestra y una twig viva . El desarrollo continúa en la twig principal , y cuando los commit se consideran apropiados, se seleccionan en la twig en vivo .

Sin embargo, descubrí que la twig activa tiene un error, que está corregido en la twig principal y estoy tratando de encontrar qué compromiso en la twig principal introdujo la corrección.

Intento hacer esto viendo primero cuál es la diferencia de compromiso entre maestro y en vivo. Algunos commits en master no llegaron a Live, ¿cuáles?

Intenté lo siguiente:

git log --cherry-pick --oneline --no-merges --right-only live-branch..master 

pero realmente no entiendo este command, esto me dice la diferencia de compromiso, pero esto me da los mismos commits que están en vivo y master, solo los hashes son diferentes.

Necesito una especie de parche para hacer esto. git diff commit_from_master, v3.8 si está vacío ignore.

¿Cómo puedo hacer esto?

Actualizaré si se necesita más aclaración.

(Ampliar comentario para responder)

Creo que puede querer --cherry , que es sinónimo de --right-only --cherry-mark --no-merges (ver la documentation de git log o git rev-list ), o lo mismo con --cherry-pick (como lo intentó) en lugar de --cherry-mark . Estos requieren el uso de la diferencia simétrica o la notación de tres puntos, es decir, live-branch...master .

Cuando se usa – --left-right con la notación de tres puntos, se obtienen hashes de confirmación anotados con < si están en el "lado izquierdo" y con > si están en el "lado derecho". Recuerde aquí que la diferencia simétrica de dos sets significa elementos que son miembros de cualquiera de los sets, pero no de la unión de ambos sets . Cuando se aplica a las twigs de Git, obtenemos esto:

  (left side) (right-side) live-branch master * * | | * X' | | : : | | X * \ / \ / \ / \ / * | : 

donde cada * o letra mayúscula representa algún compromiso. Las dos twigs se unen en algún punto, por lo que se left...right mira a la left...right todas las confirmaciones "por encima" de la unión y excluye sumriamente a todas las que están debajo. (El punto de unión también se excluye, ya que está en ambos sets, aunque --boundary vuelve a include).

Está bien, pero queremos saber qué confirmaciones son confirmaciones del lado izquierdo y , por supuesto, lo mismo para las confirmaciones del lado derecho. Luego, usando --cherry o --cherry-pick o --cherry-mark , conseguimos que Git analice la equivalencia del parche de cada commit en los lados izquierdo y derecho. Si dos hashes de compromiso diferentes tienen el mismo git patch-id calculado, lo que significa que uno probablemente fue seleccionado por otro, se vinculan entre sí. Por ejemplo, en el diagtwig de arriba, X y X 'son "lo mismo" por lo que están vinculados.

El comportamiento de las diversas opciones de --cherry es usar estas marcas de varias maneras. Está buscando confirmaciones que están presentes en el master pero no están presentes en live-branch , por lo que después de marcar pares, solo desea confirmaciones del lado derecho ( master ) que no tengan confirmaciones correspondientes del lado izquierdo ( live-branch activa). Usando --cherry-mark , puedes verlos con marcas; con --cherry-pick , Git --cherry-pick los marcados / emparejados por completo.