Comment puis-je répertorier tous les fichiers supprimés dans un référentiel Git?

306

Je sais que Git stocke des informations sur le moment où les fichiers sont supprimés et je peux vérifier les validations individuelles pour voir quels fichiers ont été supprimés, mais existe-t-il une commande qui générerait une liste de tous les fichiers supprimés sur la durée de vie d'un référentiel?

Toby
la source
Pour tous ceux qui tombent sur cette réponse , mais regarder juste pour voir la liste des fichiers ajoutés, renommés, supprimés, modifiés, etc., d'un hachage ou commettras branche à l' autre, faites ceci: git diff --name-status commit_hash.
Gabriel Staples

Réponses:

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

Voir Rechercher et restaurer un fichier supprimé dans un référentiel Git

Si vous ne voulez pas toutes les informations sur le commit dans lequel elles ont été supprimées, vous pouvez simplement y ajouter un grep delete.

git log --diff-filter=D --summary | grep delete
I82Much
la source
13
Avertissement: cela répertorie tous les fichiers que vous avez supprimés. Si vous avez supprimé un fichier, puis créé un nouveau fichier avec le même nom, il sera affiché sur cette liste, même si il y a un fichier existant là - bas.
TJ Crowder
24
Vous devriez également regarder la commande git whatchanged . C'est vraiment cool.
Mr.Black
6
Cela répertorierait également les renommages comme des suppressions. Pour ignorer ces utilisationsgit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic
2
Avec git 2.9, la détection des renoms est activée par défaut. Pour les voir à nouveau comme des suppressions, utilisezgit log --no-renames --diff-filter=D --summary | grep delete
Michael Große
2
Méfiez-vous de l'utilisation, grep deletecar si le message de validation contient le mot supprimer, il sera également récupéré. Utilisez grep 'delete mode'plutôt.
Vadim
85

Cela fait ce que vous voulez, je pense:

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

... que je viens de reprendre plus ou moins directement de cette autre réponse .

Mark Longair
la source
37

Si vous souhaitez uniquement voir les fichiers actuellement supprimés, vous pouvez utiliser ceci:

git ls-files --deleted

si vous souhaitez ensuite les supprimer (au cas où vous les auriez supprimés en n'utilisant pas "git rm") pipe qui aboutirait à xargs git rm

git ls-files --deleted | xargs git rm
Jim Clouse
la source
11
Cela affiche uniquement les fichiers de l'index qui ont été supprimés dans la copie de travail. L'OP veut tous les fichiers qui ont déjà été supprimés.
Max Nanasy
1
ougit rm $(git ls-files --deleted)
yunzen
même si ce n'est pas ce que le PO voulait, c'était toujours utile pour moi au moins, car j'avais du mal à formuler ma requête correctement dans une recherche
solstice333
10

Citant cette réponse Stack Overflow.

C'est un moyen assez soigné d'obtenir le type de changement (A: ajouté, M: modifié, D: supprimé) pour chaque fichier qui a été modifié.

git diff --name-status
akshay
la source
4

Et si vous voulez en quelque sorte restreindre les résultats, voici un bon résultat:

$ 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

Vous obtiendrez tous les fichiers supprimés some_dir(voir la commande sed) ainsi que le numéro de commit dans lequel cela se produit. Tout regex sed fera l'affaire (je l'utilise pour trouver les types de fichiers supprimés, etc.)

estani
la source
2
Je crois que c'est trop compliqué pour être utile dans la vie quotidienne des développeurs. Au lieu de cela, si vous souhaitez répertorier les fichiers supprimés du répertoire actuel, faites simplement:git log --diff-filter=D .
Sebi
Le cas que j'ai eu, c'est que le répertoire a également été supprimé et j'ai juste une nouvelle partie du nom.
estani
4

Étant donné que Windows n'a pas de grepcommande, cela a fonctionné pour moi dans PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
James Skemp
la source
Qu'est-ce que c'est Select-String?
MarcusJ
1
Il s'agit d'une applet de commande PowerShell. Voir docs.microsoft.com/en-us/powershell/module/…
James Skemp
Windows a FIND et FINDSTR , mais je dois admettre que je ne les ai jamais utilisés. Installer Git Bash est le moyen le plus simple. Une alternative est le Cygwin gonflé .
Peter Mortensen
4

Afficher tous les fichiers supprimés dans 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
la source
2
Cela ne fonctionnerait pas car il contiendrait tous les fichiers contenant un D. Vous avez besoin de quelque chose comme git diff origin/master...origin/some_branch --name-status | grep ^Dougit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood
1

Cela vous donnera une liste de tous les fichiers qui ont été supprimés dans toutes les branches, triés par leur chemin:

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

Fonctionne en msysgit (2.6.1.windows.1). Notez que nous avons besoin de "supprimer le mode 100" car les fichiers git peuvent avoir été validés en mode 100644 ou 100755.

Mr_and_Mrs_D
la source