Como fazer o git-diff e o git log ignorar arquivos novos e excluídos?

155

Às vezes, existem alguns arquivos alterados, juntamente com alguns arquivos novos, excluídos e / ou renomeados. Ao fazer git diffou git-loggostaria de omiti-los, para que eu possa identificar melhor as modificações.

Na verdade, seria melhor listar os nomes dos arquivos novos e excluídos sem o conteúdo deles. Para "old" renomeado para "new", gostaria opcionalmente de obter a diferença entre "old" e "new".

maaartinus
fonte

Respostas:

217

A --diff-filteropção funciona com ambos diffe log.

Eu uso --diff-filter=Mmuito que restringe as saídas diff apenas às modificações de conteúdo.

Para detectar renomeações e cópias e utilizá-los na saída diff, você pode usar -Me -C, respectivamente, juntamente com o Re Copções para --diff-filter.

CB Bailey
fonte
3
Quando usado com git logisso, ele ignora completamente as confirmações, que apenas adicionam e / ou removem arquivos.
Qqx
7
Existe uma maneira de realmente excluir apenas um tipo de dados? Algo como #--diff-filter=!D
Kamil Dziedzic
24
@ Kamil Sim, existe. Citação da documentação:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser 27/10
62
  • Documento oficial:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Selecione apenas os arquivos adicionados (A), copiados (C), excluídos (D), modificados (M), renomeados (R), com o tipo (por exemplo, arquivo regular, link simbólico, submódulo, ...) alterado (T), não estão imersos (U), são desconhecidos (X) ou tiveram seu emparelhamento quebrado (B). Qualquer combinação dos caracteres de filtro (incluindo nenhum) pode ser usada.

Quando * (Tudo ou nenhum) é adicionado à combinação, todos os caminhos são selecionados se houver algum arquivo que corresponda a outros critérios na comparação; se não houver arquivo que corresponda a outros critérios, nada será selecionado.

Além disso, essas letras maiúsculas podem ser excluídas para excluir. Por exemplo, --diff-filter = ad exclui caminhos adicionados e excluídos.

Exemplo: mostrar apenas arquivos adicionados, alterados e modificados, excluindo arquivos excluídos:

git diff --diff-filter=ACM
TeeTracker
fonte
2
Boa observação sobre o uso de opções de letras minúsculas para excluir caminhos e opções de letras maiúsculas para incluir caminhos.
stuyam
-3

ATUALIZAR: A resposta aceita por Charles Bailey é a correta; a funcionalidade desejada já está embutida no git.

Deixarei essa resposta aqui, pois ela pode fornecer idéias para coisas que não estão embutidas no git.


git diff mostra arquivos novos e excluídos comparando-os com /dev/null . Não deve ser muito difícil escrever algo (eu usaria o Perl) que procura /dev/nulle filtra as seguintes linhas até a próxima diff. Então git diff ... | the-filter.

Arquivos renomeados são uma questão diferente; Ainda não tenho uma boa resposta para isso.

Keith Thompson
fonte
Tudo bem, mas dessa maneira eu perderia a possibilidade de usar pager (menos) somente se necessário, não?
Maaartinus
@ maaartinus: Suponho que sim; Eu não tinha pensado nisso. (Pessoalmente, defino meu pager git como "cat" e o uso ... | lessexplicitamente.) Você pode ver lessas opções -Eou -Fopções (embora no meu sistema isso não me permita ver a saída).
Keith Thompson
OK, tudo bem, mas veja a outra resposta.
Maaartinus 5/08