Determine las dependencies de un compromiso que tratamos de elegir

Supongamos algo como lo siguiente:

HEAD/master | A<--B<--C<--D<--E<--F<--G<--J ^ official 

Donde official es una twig.
Quería seleccionar dos commits para official twig official , por ejemplo, E y J
Ambas confirmaciones fueron correcciones que afectan a los mismos 3 files.
Cuando lo hice, git cherry-pick E me fue bien, pero cuando lo hice, git cherry-pick J , tuve algunos conflictos.
Al observar las diferencias, me di count de que también necesitaba seleccionar el compromiso F, que hizo un cambio en dos de esos 3 files, cuyo cambio fue básicamente un cambio en la definición del método y J se completó con eso.
Así que fue fácil de arreglar solo haciendo git cherry-pick F && git cherry-pick J
Pregunta:
Si no estaba al tanto de los cambios realizados en esos files y el commit F era un gran compromiso para cambiar muchos files: ¿Hay alguna otra manera de averiguar en qué comprometer un compromiso que estamos tratando de elegir sin hacer manualmente un logging de git en el file y va commit por commit?

Tengo algunos conflictos [de combinación] … ¿Hay alguna otra forma de descubrir en qué comprometer un compromiso que estamos tratando de elegir depende de …

No, realmente no.

… sin hacer manualmente un logging de git en el file y comprometerse por commit?

Incluso esto no necesariamente lo hará, al less no sin pensar en el problema. Considere el siguiente bit de código C:

 void f(int x) { int i; /* * additional lines here, enough to mess with git context * since that only looks at +/- 3 lines around each patch * segment */ for (i = 0; i < x; i++) do_something(i); } 

Supongamos que una confirmación intermedia introduce una variable adicional j , y luego una confirmación posterior cambia do_something(i) a do_something(j) . Si seleccionas solo la última confirmación, Git cambiará felizmente la línea sin conflictos, pero el código ya no comstackrá, ya que no hay int j en la function f .

Dicho esto, sería posible escribir una herramienta que analice la salida de git show para cada commit intermedio, determine qué líneas se cambian (en relación con la versión en el tree de trabajo, en lugar de usar los numbers reales en cada diff, ya que puede depender de una diferencia omitida previa), y lo apunta a confirmaciones que modifican regiones en conflicto. Pero no conozco ninguna de esas herramientas.