aqui link é descrito como fazer o que você está procurando. efetivamente:
git diff -U1 | grepdiff 'console' --output-matching=hunk
Ele mostra apenas os pedaços que combinam com a string "console".
git log -G<regex> -p
é uma ferramenta maravilhosa para pesquisar o histórico de uma base de código por alterações que correspondam ao padrão especificado. No entanto, pode ser impressionante localizar o grupo relevante na saída diff / patch em um mar de pedaços quase irrelevantes.
É claro que é possível pesquisar a saída de git log
da string / regex original, mas isso faz pouco para reduzir o ruído visual e a distração de muitas alterações não relacionadas.
Lendo em git log
, vejo que há o --pickaxe-all
, que é exatamente o oposto do que eu quero: ele amplia a saída (para todo o changeset), enquanto eu quero limitá-lo (ao pedaço específico ).
Existe uma ferramenta como eu descrevo? Existe uma abordagem melhor para obter os pedaços combinados / afetados?
Alguma pesquisa inicial que fiz ...
Se fosse possível grep
a saída do diff / patch e tornasse os valores da opção de contexto dinâmicos - digamos, via regexps em vez de contagens de linha - isso seria suficiente. Mas grep
não é exatamente construído dessa forma (nem estou necessariamente solicitando esse recurso).
Eu encontrei a suíte patchutils , que inicialmente soou como se fosse adequada às minhas necessidades. Mas depois de ler suas páginas man
, as ferramentas não parecem lidar com pedaços de correspondência baseados em regexps. (Eles podem aceitar uma lista de pedaços, embora ...)
Eu finalmente encontrei splitpatch.rb , que parece lidar bem com a análise do patch, mas seria precisam ser aumentados significativamente para manipular correções de leitura via stdin
, combinando os pedaços desejados e, em seguida, exibindo os blocos.
aqui link é descrito como fazer o que você está procurando. efetivamente:
git diff -U1 | grepdiff 'console' --output-matching=hunk
Ele mostra apenas os pedaços que combinam com a string "console".
Não é exatamente o que você está pedindo, mas uma maneira de conhecer os hunks é o modo de adição interativa. Isso requer que você verifique o commit após o patch em que você está interessado
git checkout COMMIT_ID
em seguida, volte mais uma etapa no VCS, mas não no diretório de trabalho
git reset --soft HEAD^
(Neste ponto, a diferença entre o índice e o diretório de trabalho corresponderá ao patch em que você está interessado.)
Agora você pode executar git add -p
. Isso iniciará uma sessão interativa que possui uma opção /
, que permite localizar pedaços em que alguma linha corresponde a uma expressão regular. Particularmente útil se você realmente quiser processar ainda mais esses patches (como preparar uma seleção parcial de cereja).
Infelizmente, pelo menos no momento, o comando /
em add -p
funciona apenas em um único arquivo, portanto, talvez seja necessário ignorar vários arquivos não relevantes.