2009-11-29 15 views
22

¿Hay alguna forma de obtener una lista de los archivos que se enviarán cuando escriba lo siguiente?¿Cómo enumero solo los archivos que se comprometerán?

git commit -m "my changes" 

git status enumera demasiado. Podría quitar todas las palabras, pero preferiría no hacerlo. Y no quiero que me cuenten acerca de los archivos sin seguimiento.

He intentado

git ls-files -md 

pero que no muestra los archivos que se han añadido recientemente, pero aún no cometidos.

Busco la misma salida que usted recibiría en

svn status -q 

Por ejemplo $ svn status -q
Un file.py
M dir/database.py inicio
M .PY

Respuesta

4

Usted puede tratar de:

git diff --name-status 

Me sale lo siguiente:

$ git diff --name-status 
M  README.markdown 

Sin los archivos sin seguimiento.

+2

Esto no es correcto. La pregunta es, "qué se comprometerá cuando diga' git commit -m message' ". Esto proporciona las diferencias entre el árbol de trabajo y el caché que está más cerca de lo que * no * se comprometerá. –

26

Esto es lo que estaba buscando. Gracias a notnoop por la ventaja que necesitaba. Quería publicar mi solución en caso de que ayude a otros.

git diff HEAD --name-only 

Desde que pensaba hacer

git commit -s -F mesage.txt 

con los archivos que se encuentran en la primera línea.

Mi intención es crear un pequeño sistema que ignore por completo el índice, es decir, que nunca tenga que hacer git add. (Por lo que entiendo, el índice es útil cuando se crean parches, que de ninguna manera es la norma en mi flujo de trabajo).

+2

¿No te refieres a 'git diff --cached --name-only'? el 'diff HEAD' mostrará los archivos comprometidos y no empujados. el '--cached' mostrará los archivos que se enviarán cuando ejecute' git commit'' – gcb

+0

'git diff --staged --name-only' también funciona. Dependiendo de cómo piense acerca de git, es posible que desee usar --staged [sinónimo] (https://stackoverflow.com/a/39877896) en lugar de --cached. – SpeedCoder5

8

Este comando le dirá qué archivos en su área index/cache/stage difieren de HEAD actual (y si son adiciones, modificaciones o eliminaciones) que son los cambios que se cometerán si usa git commit sin rutas explícitas o la opción -a. Su formato es razonablemente similar al resultado svn status que muestra.

git diff --cached --name-status 
3

sé OP preguntó original para evitar git status, pero me pareció que sería bueno dejar para la posteridad (es decir, otras personas que no comparten las reservas de OP).

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//' 

Mi razonamiento es que git status --porcelain parece que fue construido precisamente para este tipo de dilema ...

fuente: http://git-scm.com/docs/git-status.html

EDIT: Usted puede optar por no utilizar sed -e 's/[A-Z] *//' si desea mantener las etiquetas de modificación de git delante de cada nombre de archivo.

+0

+1. Acepto que 'git status --porcelain' se puede usar en un script. Lo he documentado en http://stackoverflow.com/a/6978402/6309, diciendo que "La nueva opción \ [' --porcelain' \] hace que el formato de salida nativo del comando emita un resultado que es más fácil de manejar. Porcelana." – VonC

+0

Esto no parece enumerar los archivos reales que se presionarían durante un git push (y que han sido organizados por un git add/commmit) – Paul

Cuestiones relacionadas