Diferencia entre 2 confirmaciones de git, excepto contenido en 3er compromiso

¿Hay alguna forma de get meld + git para mostrar los cambios que ocurrieron entre 2 commits de git, pero excluir los cambios introducidos en un 3er compromiso? El caso de uso es ver cuánto difiere el compromiso actual de un compromiso hecho antes de una fusión de 3 vías.

Tengo una forma hacky de hacer eso.

Advertencia : antes de usar un solo trazador de líneas a continuación, mejor confirmar / respaldar todos sus cambios no confirmados. Este solo trazador intenta esconder y restaurar tus cambios. Pero aún puede presentar algo de desorder (nuevos files) en el repository o puede contener algún error

El siguiente código muestra una diferencia entre FIRST_COMMIT y SECOND_COMMIT excepto los cambios a otros files introducidos por otra sucursal en MERGE_COMMIT . Debe establecer las variables de env FIRST_COMMIT , SECOND_COMMIT y MERGE_COMMIT en los valores apropiados.

 FIRST_COMMIT=866dfa2a7 MERGE_COMMIT=94b195989 SECOND_COMMIT=0fc856fd9 git stash ; \ git checkout $FIRST_COMMIT ; \ git ls $MERGE_COMMIT..$SECOND_COMMIT | sort | \ uniq | \ xargs -L 1 git checkout $SECOND_COMMIT -- ; \ git difftool -d $FIRST_COMMIT ; \ git stash && git stash drop ; \ git stash apply 

Lo que hace este single-liner:

  • pone cambios locales no confirmados en git stash
  • comtesting el estado del código en FIRST_COMMIT
  • toma todos los files modificados en MERGE_COMMIT y SECOND_COMMIT y todas las revisiones entre ellos
  • cada file del paso anterior se restablece a su estado en el momento de SECOND_COMMIT
  • muestra diff usando la herramienta diff que configuraste para git. La diferencia se encontraría entre FIRST_COMMIT y SECOND_COMMIT excepto los cambios a otros files introducidos por otra sucursal en MERGE_COMMIT . La oración anterior significa que si se modificó algún file tanto en SECOND_COMMIT como en MERGE_COMMIT , todos los cambios estarán presentes en diff. Es difícil evitar eso.
  • Después de salir de su herramienta diff, git eliminará los cambios temporales y revisará la twig en la que ha estado trabajando.
  • Después de eso, se aplicarán los cambios de git stash.

Dependiendo del flujo de trabajo de git que prefiera, puede decidir eliminar las llamadas de git stash del único trazador de líneas anterior