Come posso elencare tutti i file eliminati in un repository Git?


306

So che Git memorizza le informazioni su quando i file vengono eliminati e sono in grado di controllare i singoli commit per vedere quali file sono stati rimossi, ma esiste un comando che genererebbe un elenco di tutti i file eliminati durante la durata di un repository?


Per chiunque inciampo su questa risposta, ma solo cercando di visualizzare un elenco dei file aggiunti, rinominati, cancellati, modificati, ecc, da un commettere hash o ramo all'altro, fare questo: git diff --name-status commit_hash.
Gabriel Staples,

Risposte:


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

Vedi Trova e ripristina un file cancellato in un repository Git

Se non desideri tutte le informazioni su quale commit sono state rimosse, puoi semplicemente aggiungerne una grep delete.

git log --diff-filter=D --summary | grep delete

13
Avviso: elenca tutti i file che hai eliminato. Se hai eliminato un file, quindi hai creato un nuovo file con lo stesso nome, verrà visualizzato in questo elenco, anche se è presente un file esistente.
TJ Crowder,

24
Dovresti anche guardare il comando git whatchanged . È molto bello.
Mr. Black

6
Ciò elencherebbe anche i nomi rinominati come eliminazioni. Per saltare questi usigit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic,

2
Con git 2.9 il rilevamento di nomi è attivato di default. Per vederli di nuovo come eliminazioni usaregit log --no-renames --diff-filter=D --summary | grep delete
Michael Große il

2
Fai attenzione grep deleteperché, se il messaggio di commit ha la parola delete, verrà raccolto anche. Usa grep 'delete mode'invece.
Vadim,

85

Questo fa quello che vuoi, penso:

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

... che ho appena preso più o meno direttamente da questa altra risposta .


37

Se sei interessato solo a visualizzare i file attualmente eliminati, puoi utilizzare questo:

git ls-files --deleted

se poi vuoi rimuoverli (nel caso in cui li hai eliminati non usando "git rm") pipe che risultano in xargs git rm

git ls-files --deleted | xargs git rm

11
Questo mostra solo i file nell'indice che sono stati eliminati nella copia di lavoro. L'OP vuole tutti i file che siano mai stati eliminati.
Max Nanasy,

1
oppuregit rm $(git ls-files --deleted)
yunzen

anche se non è quello che voleva l'OP, questo era comunque utile per me stesso, dato che avevo difficoltà a formulare correttamente la mia query in una ricerca
solstice333

10

Citando questa risposta Stack Overflow.

È un modo piuttosto semplice per ottenere il tipo di modifica (A: Aggiunto, M: Modificato, D: Cancella) per ogni file che è stato modificato.

git diff --name-status

4

E se vuoi in qualche modo limitare i risultati, eccone uno bello:

$ 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

Otterrai tutti i file eliminati da some_dir(vedi il comando sed) insieme al numero di commit in cui si verifica. Qualsiasi sed regex lo farà (lo uso per trovare tipi di file cancellati, ecc.)


2
Credo che sia complicato essere utile nella vita quotidiana degli sviluppatori. Invece, se si desidera elencare i file eliminati dalla directory corrente, fare semplicemente:git log --diff-filter=D .
Sebi

Il caso che ho avuto è stato che anche la directory è stata rimossa e ho solo una nuova parte del nome.
estani,

4

Poiché Windows non ha un grepcomando, questo ha funzionato per me in PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

Che cosa è Select-String?
MarcusJ,


Windows ha FIND e FINDSTR , anche se devo ammettere che non li ho mai usati. L'installazione di Git Bash è il modo più semplice. Un'alternativa è il Cygwin gonfio .
Peter Mortensen,

4

Mostra tutti i file eliminati in some_branch

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

o

git diff origin/master...origin/some_branch --name-status --diff-filter=D 

2
Questo non funzionerebbe perché conterrebbe tutti i file con una D in essi. Hai bisogno di qualcosa del genere git diff origin/master...origin/some_branch --name-status | grep ^Dogit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood,

1

Questo ti porterà un elenco di tutti i file che sono stati eliminati in tutti i rami, ordinati in base al loro percorso:

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

Funziona in msysgit (2.6.1.windows.1). Nota che abbiamo bisogno di "eliminare la modalità 100" poiché i file git potrebbero essere stati sottoposti a commit come modalità 100644 o 100755.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.