¿Cómo enumerar todos los archivos de una confirmación?

Estoy buscando un simple comando git que proporcione una lista bien formateada de todos los archivos que formaron parte del commit dada por un hash (SHA1), sin información extraña.

Lo he intentado:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Aunque lista los archivos, también incluye información diff no deseada para cada uno.

¿Hay algún otro comando git que me proporcione sólo la lista que quiero, de modo que pueda evitar analizarla desde la salida de git show?

Solución

Modo preferido (porque es un comando de plomería; pensado para ser programático):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Otra forma (menos preferida para los scripts, porque es un comando de porcelana; pensada para el usuario)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • El argumento --no-commit-id suprime la salida del ID de la confirmación.
  • El argumento --pretty especifica una cadena de formato vacía para evitar el desorden al principio.
  • El argumento --name-only muestra sólo los nombres de los archivos que fueron afectados (Gracias Hank). Utilice --name-status en su lugar, si quiere ver lo que ha ocurrido con cada archivo (Delegado, Mmodificado, Aañadido)
  • El argumento -r es para recurrir a los subárboles
Comentarios (24)

Asumiré que gitk no es deseado para esto. En ese caso, intente git show --name-only.

Comentarios (3)

Una combinación de "git show --stat" (gracias Ryan) y un par de comandos sed deberían recortar los datos por ti:

git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

Eso producirá sólo la lista de archivos modificados.

Comentarios (0)