¿Cómo puedo enumerar todos los archivos eliminados en un repositorio de Git?

306

Sé que Git almacena información sobre cuándo se eliminan los archivos y puedo verificar las confirmaciones individuales para ver qué archivos se han eliminado, pero ¿hay algún comando que genere una lista de cada archivo eliminado a lo largo de la vida útil de un repositorio?

Toby
fuente
Para cualquiera de tropezar con esta respuesta, pero sólo mirar para ver una lista de archivos añadidos, cambiado de nombre, eliminar, modificar, etc., de un hash de cometer o rama a otra, hacer esto: git diff --name-status commit_hash.
Gabriel Staples

Respuestas:

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

Consulte Buscar y restaurar un archivo eliminado en un repositorio de Git

Si no desea toda la información sobre en qué confirmación se eliminaron, simplemente puede agregar una grep deleteallí.

git log --diff-filter=D --summary | grep delete
I82Mucho
fuente
13
Advertencia: Esto enumera todos los archivos que ha eliminado. Si ha eliminado un archivo, a continuación, crea un nuevo archivo con el mismo nombre, que se mostrará en esta lista, a pesar de que hay un archivo existente allí.
TJ Crowder
24
También debe mirar el comando git whatchanged . Es genial.
Mr.Black
66
Esto enumeraría también los cambios de nombre como borrados. Para omitir estos usosgit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic
2
Con git 2.9, la detección de cambios de nombre se activa por defecto. Para verlos nuevamente como borrados, usegit log --no-renames --diff-filter=D --summary | grep delete
Michael Große
2
Tenga cuidado al usarlo grep deleteporque si el mensaje de confirmación tiene la palabra eliminar, también será recogido. Usar en su grep 'delete mode'lugar.
Vadim
85

Esto hace lo que quieres, creo:

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

... que acabo de tomar más o menos directamente de esta otra respuesta .

Mark Longair
fuente
37

Si solo está interesado en ver los archivos eliminados actualmente, puede usar esto:

git ls-files --deleted

si luego desea eliminarlos (en caso de que los haya eliminado sin usar "git rm"), conduzca a xargs git rm

git ls-files --deleted | xargs git rm
Jim Clouse
fuente
11
Esto muestra solo los archivos en el índice que se han eliminado en la copia de trabajo. El OP quiere todos los archivos que alguna vez se han eliminado.
Max Nanasy
1
ogit rm $(git ls-files --deleted)
yunzen
a pesar de que no era lo que quería el OP, esto todavía fue útil para mí, al menos, ya que tuve problemas para formular mi consulta correctamente en una búsqueda
solstice333
10

Citando esta respuesta de desbordamiento de pila.

Es una forma bastante ordenada de obtener el tipo de cambio (A: agregado, M: modificado, D: eliminado) para cada archivo que se modificó.

git diff --name-status
akshay
fuente
4

Y si quieres restringir de alguna manera los resultados, aquí hay uno bueno:

$ 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

Obtendrá todos los archivos eliminados some_dir(consulte el comando sed) junto con el número de confirmación en el que sucede. Cualquier sed regex servirá (lo uso para encontrar tipos de archivos eliminados, etc.)

estani
fuente
2
Creo que es complicado ser útil en la vida diaria del desarrollador. En cambio, si desea enumerar los archivos eliminados del directorio actual, simplemente haga lo siguiente:git log --diff-filter=D .
Sebi
El caso que tuve fue que el directorio también se eliminó y acabo de volver a formar parte del nombre.
estani
4

Como Windows no tiene un grepcomando, esto funcionó para mí en PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
James Skemp
fuente
¿Qué es Select-String?
MarcusJ
1
Es un cmdlet de PowerShell. Ver docs.microsoft.com/en-us/powershell/module/…
James Skemp
Windows tiene FIND y FINDSTR , aunque debo admitir que nunca los he usado. Instalar Git Bash es la forma más fácil. Una alternativa es el hinchado Cygwin .
Peter Mortensen
4

Mostrar todos los archivos eliminados en 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 
vix2
fuente
2
Esto no funcionaría porque contendría todos los archivos con una D en ellos. Necesitas algo como git diff origin/master...origin/some_branch --name-status | grep ^Dogit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood 05 de
1

Esto le dará una lista de todos los archivos que se eliminaron en todas las ramas, ordenados por su ruta:

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

Funciona en msysgit (2.6.1.windows.1). Tenga en cuenta que necesitamos "modo de eliminación 100" ya que los archivos git pueden haberse confirmado como modo 100644 o 100755.

Mr_and_Mrs_D
fuente