Acho que você pode combinar git blame e git merge-base para obter as informações que deseja:
git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN"
Isso localiza o ancestral comum entre A e B e executa git blame on file , ignorando qualquer coisa mais antiga que o ancestral comum (a .. notação diz git blame para examinar as revisões iniciando com o ancestral e finalizando na cabeça atual). -n adiciona números de linha na saída. Em seguida, grep -v "^^" remove as linhas que não foram alteradas desde o ancestral comum e, finalmente, grep "$PATTERN" procura o padrão apenas entre as linhas que foram alteradas. Como git blame no modo não reverso mostra apenas as linhas atualmente no arquivo, os resultados incluirão apenas linhas adicionadas ou modificadas, o que é exatamente equivalente ao seu filtro ^\+ .