Como posso listar todos os arquivos excluídos em um repositório Git?

306

Sei que o Git armazena informações sobre quando os arquivos são excluídos e posso verificar confirmações individuais para ver quais arquivos foram removidos, mas existe um comando que geraria uma lista de todos os arquivos excluídos durante a vida útil de um repositório?

Toby
fonte
Para qualquer um tropeçar em cima deste resposta, mas apenas olhando para ver uma lista de arquivos adicionados, renomeados, excluídos, modificados, etc, de um cometer hash ou ramo para outro, faça o seguinte: git diff --name-status commit_hash.
Gabriel Staples

Respostas:

411
git log --diff-filter=D --summary

Consulte Localizar e restaurar um arquivo excluído em um repositório Git

Se você não quiser todas as informações sobre em que consolidação elas foram removidas, basta adicionar uma grep delete.

git log --diff-filter=D --summary | grep delete
I82Much
fonte
13
Aviso: lista os arquivos que você excluiu. Se você tiver excluído um arquivo, em seguida, criou um novo arquivo com o mesmo nome, vai aparecer nesta lista, mesmo que não haja um arquivo existente lá.
TJ Crowder
24
Você também deve olhar para o comando git whatchanged . É muito legal.
Mr.Black
6
Isso listaria também os renomeados como exclusões. Para pular esses usosgit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic
2
Com o git 2.9, a detecção de renomeação é ativada por padrão. Para ver estes novamente como exclusões usargit log --no-renames --diff-filter=D --summary | grep delete
Michael Große
2
Cuidado ao usar, grep deleteporque se a mensagem de confirmação tiver a palavra excluir, ela também será exibida. Use em grep 'delete mode'vez disso.
Vadim
85

Isso faz o que você quer, eu acho:

git log --all --pretty=format: --name-only --diff-filter=D | sort -u

... que acabei de extrair mais ou menos diretamente dessa outra resposta .

Mark Longair
fonte
37

Se você estiver interessado apenas em ver os arquivos excluídos no momento, poderá usar este:

git ls-files --deleted

se você quiser removê-los (no caso de excluí-los sem usar "git rm") pipe que resulta em xargs git rm

git ls-files --deleted | xargs git rm
Jim Clouse
fonte
11
Isso mostra apenas os arquivos no índice que foram excluídos na cópia de trabalho. O OP deseja todos os arquivos que já foram excluídos.
precisa saber é o seguinte
1
ougit rm $(git ls-files --deleted)
yunzen 8/07
mesmo que ele não é o que o OP queria, isso ainda era útil para pelo menos mim, desde que eu tinha dificuldade fraseado minha consulta corretamente em uma pesquisa
solstice333
10

Citando esta resposta de estouro de pilha.

É uma maneira bastante interessante de obter o tipo de alteração (A: Adicionado, M: Modificado, D: Excluído) para cada arquivo que foi alterado.

git diff --name-status
akshay
fonte
4

E se você deseja restringir os resultados de alguma forma, aqui está um bom:

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

Você terá todos os arquivos excluídos some_dir(consulte o comando sed) junto com o número de confirmação no qual isso acontece. Qualquer sed regex serve (eu uso isso para encontrar tipos de arquivos excluídos, etc.)

estani
fonte
2
Acredito que seja muito complicado ser útil na vida diária dos desenvolvedores. Em vez disso, se você quiser lista arquivos apagados do diretório atual, basta fazer:git log --diff-filter=D .
Sebi
O caso que tive foi que o diretório também foi removido e eu apenas nova parte do nome.
estani
4

Como o Windows não possui um grepcomando, isso funcionou para mim no PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
James Skemp
fonte
O que é Select-String?
MarcusJ
1
É um cmdlet do PowerShell. Consulte docs.microsoft.com/pt-BR/powershell/module/…
James Skemp
O Windows tem FIND e FINDSTR , embora eu deva admitir que nunca os usei. Instalar o Git Bash é a maneira mais fácil. Uma alternativa é o inchado Cygwin .
Peter Mortensen
4

Mostrar todos os arquivos excluídos em some_branch

git diff origin/master...origin/some_branch --name-status | grep ^D

ou

git diff origin/master...origin/some_branch --name-status --diff-filter=D 
vix2
fonte
2
Isso não funcionaria porque conteria todos os arquivos com um D neles. Você precisa de algo como git diff origin/master...origin/some_branch --name-status | grep ^Dougit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood
1

Isso fornecerá uma lista de todos os arquivos que foram excluídos em todas as ramificações, classificados por seu caminho:

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

Funciona no msysgit (2.6.1.windows.1). Observe que precisamos do "modo de exclusão 100", pois os arquivos git podem ter sido confirmados como modo 100644 ou 100755.

Mr_and_Mrs_D
fonte