Eu tenho 2 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 no ramo 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 eu estou reinventando/indo uma rotatória para algo que é prontamente suportado no git.
Existe uma maneira melhor?
relate perguntas
-
Leia o arquivo de texto com palavras e sua contagem de ocorrências e saída de impressão classificada
-
Comando ls | grep mostrando apenas diretórios (quando também deveria mostrar arquivos)
-
quando o grep conta e quando não
-
git: use visual diff (meld) somente quando estiver na GUI
-
grep --line-buffered até X linhas?
Acho que você pode combinar
git blame
egit merge-base
obter as informações que procura:Isso encontra o ancestral comum entre A e B e,
git blame
em seguida, executafile
, ignorando qualquer coisa mais antiga que o ancestral comum (a..
notação dizgit blame
para examinar as revisões começando com o ancestral e terminando no cabeçalho atual).-n
adiciona números de linha na saída. Em seguida,grep -v "^^"
remove todas 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. Comogit blame
no modo não reverso mostra apenas as linhas atualmente no arquivo, os resultados incluirão apenas as linhas adicionadas ou modificadas, o que é exatamente equivalente ao seu^\+
filtro.