Obtener el primer commit que no contenga una línea en git

Me interesa encontrar un commit en git que borre una línea identificando el commit más antiguo que no lo incluyó .

Soy consciente del command git blame --reverse pero muestra el último compromiso que incluye la línea, que no es lo mismo. Intenté usar eso combinado con el git log --reverse --ancestry-path <commit shown by blame>..HEAD para encontrar el commit que necesitaba con cierto éxito, pero resultó tedioso en ciertos casos.

Digamos que tengo el siguiente gráfico

  /----G---H---I / \ \ \ A----B---C---D---F--G \ / X 

Sé que A contiene la línea, pero G no. La confirmación que realmente lo eliminó fue X. Sin embargo, si ejecuto git blame --reverse A..G , me dirá que el último commit con esa línea fue I. Haciendo git log --reverse --ancestry-path I..G , veré que F fue una fusión así que tendré que profundizar más ejecutando git blame --reverse A..D , que devolverá H. Entonces encontraré G, solo entonces finalmente A, que me permitirá encontrar X.

No es un escenario poco probable, tuve este problema cuando tuvimos un montón de requestes de extracción fusionadas en la twig principal en un momento similar, todas las confirmaciones bifurcadas que aún contenían el código eliminado.

¿Hay algún command que devuelva el compromiso X directamente? ¿O al less hay una forma más rápida de encontrarlo?

git log -S"this is part of the line that is added or removed" le dará todos los commits que cambian el número de ocurrencias de la cadena especificada (es decir, adición / eliminación) en un file.

También puede hacer que esa cadena se trate como una expresión regular con --pickaxe-regex .