¿Cómo puedo listar todos los archivos eliminados en un repositorio git?


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

 236
git
Author: mikemaccana, 2011-05-16

7 answers

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

Ver Buscar y restaurar un archivo eliminado en un repositorio Git

Si no quieres toda la información sobre en qué commit fueron eliminados, puedes simplemente agregar un grep delete allí.

git log --diff-filter=D --summary | grep delete
 334
Author: I82Much,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:25

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.

 77
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:47

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 elimine no utilizando "git rm"), envíe ese resultado a xargs git rm

git ls-files --deleted | xargs git rm
 27
Author: Jim Clouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-25 02:10:57

Citando esta respuesta de stackoverflow. Una forma bastante ordenada de obtener el tipo de cambio (A:Agregado, M:Modificado, D:Eliminado) para cada archivo que se cambió.

git diff --name-status
 7
Author: akshay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:35

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 borrados de some_dir (vea el comando sed) junto con el número de confirmación en el que sucede. Cualquier regex sed hará (yo uso esto para encontrar tipos de archivos eliminados, etc)

 4
Author: estani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 09:56:06

Dado que Windows no tiene un comando grep, esto funcionó para mí en PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
 2
Author: James Skemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-22 15:40:18

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). Nota: necesitamos "eliminar modo 100", ya que los archivos git pueden haber sido comprometidos como modo 100644 o 100755.

 0
Author: Mr_and_Mrs_D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-20 18:34:13