¿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.

chrisjlee
fuente
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.

Lily Ballard
fuente
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).

TomNysetvold
fuente
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
git status -s | awk '{if ($1 == "M") print $2}'
Carl Bäckström
fuente
3
O bienawk '$1 == "M" { print $2 }'
Calpau
29

Para archivos modificados:

git status | grep modified:
lanza
fuente
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

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

git diff --name-only también funciona

mpelzsherman
fuente
3

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

git status -uno
Tectrendz
fuente
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.

Karthik
fuente
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
BillFienberg
fuente
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
briggySmalls
fuente
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
SebMa
fuente
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

n_x_l
fuente
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'

David Hernández
fuente
0

Para enumerar todos los archivos modificados use:

git show --stat --oneline HEAD
Fayaz
fuente
0

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

usuario1172173
fuente
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:

Carson
fuente