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 ^\+
.