Usar git gui blameé difícil de usar em scripts e, embora git log -Ge git log --pickaxepossa mostrar a você quando a definição do método apareceu ou desapareceu, não encontrei nenhuma maneira de fazê-los listar todas as alterações feitas no corpo do seu método.
No entanto, você pode usar gitattributese a textconvpropriedade para reunir uma solução que faça exatamente isso. Embora esses recursos tenham sido originalmente planejados para ajudá-lo a trabalhar com arquivos binários, eles funcionam tão bem aqui.
A chave é fazer com que o Git remova do arquivo todas as linhas, exceto aquelas em que você está interessado, antes de fazer qualquer operação diff. Em seguida git log, git diffetc. verá apenas a área na qual você está interessado.
Aqui está o esboço do que faço em outro idioma; você pode ajustá-lo para suas próprias necessidades.
Escreva um script de shell curto (ou outro programa) que receba um argumento - o nome de um arquivo de origem - e produza apenas a parte interessante desse arquivo (ou nada se nada disso for interessante). Por exemplo, você pode usar sedo seguinte:
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
Defina um textconvfiltro Git para seu novo script. (Consulte a gitattributespágina do manual para obter mais detalhes.) O nome do filtro e a localização do comando podem ser o que você quiser.
$ git config diff.my_filter.textconv /path/to/my_script
Diga ao Git para usar esse filtro antes de calcular as diferenças para o arquivo em questão.
$ echo "my_file diff=my_filter" >> .gitattributes
Agora, se você usar -G.(observe o .) para listar todos os commits que produzem mudanças visíveis quando seu filtro é aplicado, você terá exatamente aqueles commits nos quais está interessado. Quaisquer outras opções que usam as rotinas diff do Git, como --patch, também obter essa visão restrita.
$ git log -G. --patch my_file
Voilà!
Uma melhoria útil que você pode querer fazer é fazer com que o script do filtro tome um nome de método como seu primeiro argumento (e o arquivo como seu segundo). Isso permite que você especifique um novo método de interesse apenas chamando git config, em vez de ter que editar seu script. Por exemplo, você pode dizer:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
Claro, o script de filtro pode fazer o que você quiser, aceitar mais argumentos ou o que quer que seja: há muita flexibilidade além do que mostrei aqui.