Obtendo diferenças de arquivo entre revisões / ramificações específicas

1

Eu tenho dois ramos diferentes, A, B, que têm uma versão (ligeiramente diferente) de um arquivo X.
Estou interessado em obter os commits que adicionaram alguns padrões específicos na ramificação B.
O que eu faço aproximadamente: diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done
Isso funciona, mas eu queria saber se estou reinventando / indo em uma rotunda para algo que é facilmente suportado no git.
Existe uma maneira melhor?

    
por Jim 08.06.2018 / 00:03

1 resposta

2

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

    
por 08.06.2018 / 00:25