Git: ¿Encontrar los dos commits más cercanos de dos repositorys?

Tengo una colección de repositorys que se derivaron el uno del otro. En lugar de crear una nueva twig para cada revisión principal, se creó un nuevo repository B con el último estado del antiguo A.

Intento unir estas cosas pobres, pero para hacerlo necesito averiguar qué compromiso en A fue el compromiso inicial de B tomado de.

¿Cómo puedo hacer eso?

Editar: tenga en count que no hay certeza de que la confirmación inicial de B contenga una fuente idéntica a una de las confirmaciones de A. Por ejemplo, un Makefile o algo puede haber sido modificado para acomodar el nuevo nombre del proyecto.

Bueno, espero que el tree fuente del compromiso inicial en B sea completamente el mismo que en algunos commit (s) en A En este caso, puede resolver su problema con relativa facilidad:

Primero mire el campo de tree del primer commit en B : git log --pretty=raw <B_initial_commit> y recuerde SHA-1 del tree.

Ahora puedes hacer git log --pretty=raw en el repository A e intentar ubicar este SHA-1. Si encuentra tal compromiso, ¡entonces bingo! tienes el requerido (en realidad podría haber algunos, pero no importa ya que todos estos commits tienen absolutamente los mismos treees fuente, solo elige alguno).

La situación, sin embargo, podría ser un poco peor. Los que "clonaron" ese repository B podrían omitir algunos de los files (por ejemplo, .gitignore u otros files, que no hacen que un tree fuente sea diferente para un ser humano, pero lo hacen diferente para un robot).

Editar : aquí está la posible solución para el caso. La idea es comprender qué cambios se han realizado en la confirmación inicial de B cuando B se bifurcó de A y hacer una secuencia de commands que revertiría dichos cambios. O si los cambios son demasiado complejos para poder revertirlos fácilmente, simplemente elimine dichos files de B y A y luego simplemente compare nuevamente los treees de fonts resultantes con el método descrito anteriormente.

Así que suponga que haría un script así, que, por ejemplo, elimina (algunos) Makefiles y realiza otros cambios posibles en B, y otro script correspondiente para A. Luego, usa git filter-branch con tree-filter y así crea 2 nuevos repositorys de A y B, llamémoslos A 'y B'. Entonces, como se describió anteriormente, puede intentar ubicar un tree dentro de A 'con el mismo SHA1 que el SHA1 del tree de la confirmación inicial en B'. Como los compromisos en A y A 'corresponden uno por uno, entonces obtienes la solución.