¿es posible `git status` solo archivos modificados?


173

¿Es posible git statusy mostrar solo archivos modificados?

El problema es que tengo demasiados archivos organizados que no quiero comprometer o ignorar en este momento y no puedo desplazarme hacia arriba. Tengo un límite de desplazamiento establecido en Ubuntu.


1
¿Cómo tienes un límite de desplazamiento? Por defecto, git statusinvocará el buscapersonas.
Lily Ballard

Lo siento, el límite de desplazamiento está configurado en 512 líneas en mi máquina. Supongo que podría cambiarlo; pero preferiría un comando de una línea para ver solo los archivos modificados en el estado porque GD / imagecache generará aún más archivos eventualmente.
chrisjlee

1
Bien ... mi punto es que el buscapersonas no usa el desplazamiento hacia atrás de su terminal.
Lily Ballard

¿Algo malo con solo buscar lo que sea interesante? Use --shorto --porcelainpara obtener versiones de una línea del estado.
torek

2
Un punto más, basado en la sugerencia de uso git ls-files -m: ¿qué modificaciones le interesan, por etapas, por etapas o ambas?
torek

Respuestas:


268

No puede hacer esto con git status, pero podría usar git ls-files -mpara mostrar todos los archivos modificados.


66
Para que otros lo sepan, esto solo mostrará los archivos que han sido modificados sin estar preparados.
Gerry

11
Si bien esta es la respuesta aceptada, tiene información inexacta. Puede "'git status' solo archivos modificados" con git status | grep modifiedlo que indica user23186 en su respuesta.
K. Alan Bates

9
Para mí, git ls-files -mno muestra nada pero git status | grep modifiedestá funcionando.
Sandeepan Nath

1
Como otros han señalado, esto solo muestra archivos sin clasificar. Si desea mostrar tanto los archivos en escena como los en etapas, esta es la mejor respuesta que he visto: stackoverflow.com/a/39994894/452587
thdoan

1
@thdoan Hay varias opciones para mostrar archivos almacenados, aunque esta pregunta en particular parece querer excluir explícitamente los archivos almacenados. git diff --name-only --diff-filter=M HEADmostraría solo los archivos modificados, tanto para etapas como para etapas, aunque debe verificar los documentos --diff-filterpara ver qué otros tipos de filtros puede agregar.
Lily Ballard

58

Parece git status -unoque solo le mostrará los archivos que git está rastreando, sin mostrar nada más en el directorio. No es exactamente lo que solicitó, pero tal vez logre lo mismo (obtener una lista legible de archivos que rastrea git).


1
git status -u nono muestra (1) archivos rastreados que se modifican, ni (2) archivos rastreados que están organizados. He verificado esto con las versiones de git 1.8.5.2 y 1.9.4.
mxxk

2
@TomNysetvold, en realidad puedes decir git status -uno( stackoverflow.com/questions/7008546/… )
mxxk


29

Para archivos modificados:

git status | grep modified:

1
Tan útil que he creado un alias para esto:git config --global alias.modified '!git status | grep modified:'
Richard Parnaby-King el

15

git diff --name-only --diff-filter=M


2
Recomiendo esos filtros: git diff --cached --name-only --diff-filter=ACMRque incluye archivos agregados, copiados, modificados y renombrados.
qwertzguy


3

Estaba buscando la misma información y encontré lo siguiente que da archivos modificados:

git status -uno

2
git status -uno --porcelainagrega una buena salida para el script de análisis
pprzemek

3

Puedes usar

$ git status -uno 

para enumerar solo los archivos modificados.


3

El problema es que tengo demasiados archivos organizados que no quiero comprometer o ignorar en este momento y no puedo desplazarme hacia arriba.

Si bien esto puede no responder directamente a la pregunta de enumerar solo los archivos modificados, puede ayudar a limitar la cantidad de archivos que se enumeran.

Puede pasar una ruta a git statuspara limitar la salida a una carpeta específica en el repositorio.

Por ejemplo:

git status app
git status spec
git status src/components

2

Para enumerar los archivos modificados, use:

git ls-files -m

Si solo desea el nombre basename (sin ruta), puede canalizar cada resultado al comando basename usando xargs, línea por línea:

git ls-files -m | xargs -L 1 basename

1

Yo uso este comando:

$ git status -uno -sb

Y la salida se ve así:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h

0

Yo uso git cola. Es un cliente de interfaz de usuario simple y elegante que le mostrará los archivos modificados y le proporcionará una imagen diferencial de los cambios que realizó.

git colale proporciona una GUI donde puede visualizar qué archivos modificó, cuáles organizó e incluso aquellos que no rastrea. Su pregunta era usar el estado de git solo creo, pero pensé que git cola puede ayudar cuando eso y otras cosas también. Consulte esta página web desde más información: git-cola.github.com/screenshots.html


1
¿Podría darme cómo se relaciona eso con mi respuesta dado que no estoy familiarizado con esta git cola? por ejemplo, capturas de pantalla, o más detalles?
chrisjlee 05 de

es por eso que se votó negativamente? :) De todos modos, git cola le proporciona una GUI donde puede visualizar qué archivos modificó, cuáles organizó e incluso aquellos que no rastrea. Su pregunta era usar el estado de git solo creo, pero pensé que git cola puede ayudar cuando eso y otras cosas también. Consulte esta página web desde más información: git-cola.github.com/screenshots.html
n_x_l

¿Cómo cambiar el idioma de la interfaz de cola?
ziyuang

0

Si desea enumerar los archivos modificados , puede hacer esto:

git log -n1 --oneline --name-status | grep '^M'


0

Para enumerar todos los archivos modificados use:

git show --stat --oneline HEAD

0

Todas excelentes respuestas; solo FEI, "git checkout" (cambio ao en la misma rama) parece mostrar solo archivos modificados.


0

OS: ventanas

El siguiente comando mostrará todas las líneas que contienen "modificado:" , "renombrado:" o "nuevo archivo:"

git status | findstr "modified: renamed: new file:"

Si desea un tipo de archivo especificado: (por ejemplo *.py *.ini)

git status *.py *.ini | findstr "modified: renamed: new file:"

Si crees que es demasiado problema escribir tanto:

  1. crear un archivo por lotes (por ejemplo: st.bat)

  2. escribir contenidos de la siguiente manera:

    @echo off
    :: st.bat  (this line doesn't necessarily. ( just let you know the scripts name.))
    git status %~1 | findstr "modified: renamed: new file:"
    
  3. agregue la ruta del entorno que contiene su archivo por lotes. ( st.bat)

  4. uso

    st.bat "*.py *.ini"
    

    (nota: si escribe> 1, entonces debe agregar el punto y coma)

OS: LINUX

como @Lance dice que puedes probar

git status | grep modified:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.