git status
Aprende cómo funciona git status, lee su salida larga y corta, usa --short, --branch y --porcelain, y entiende qué significa cada estado.

El comando git status responde una pregunta única y constante mientras trabajas: ¿qué ha cambiado desde mi último commit y qué está listo para ser confirmado? Es el comando que ejecutarás más que ningún otro — antes de preparar cambios, antes de hacer commit y en cualquier momento que pierdas la pista de dónde se encuentra un archivo. Esta página explica los tres estados en los que puede estar un archivo, cómo leer tanto la salida larga como la corta, y las opciones que permiten que status se integre en scripts.
Qué muestra git status
git status muestra el estado de dos cosas: el directorio de trabajo (los archivos en disco que estás editando) y el área de preparación, también llamada índice (la instantánea que estás preparando para el próximo commit). Te indica qué archivos están:
- Preparados (staged) — cambios añadidos con git add y listos para el próximo commit.
- No preparados (modificados) — archivos rastreados que has cambiado pero que aún no has añadido.
- Sin rastrear (untracked) — archivos nuevos que Git nunca ha visto y no está siguiendo.
Lo que git status no muestra es el historial de commits. No dice nada sobre commits anteriores, ramas que hayas fusionado o quién cambió qué — para eso, usa git log. Tampoco muestra el contenido de tus cambios; para ver las líneas exactas añadidas y eliminadas, usa git diff. En resumen, status resume el efecto de git add y git commit sobre tus archivos actuales.
Uso básico
El comando no requiere argumentos en su forma más común:
git statusEn un repositorio limpio sin nada que hacer, Git te lo indica:
On branch master
nothing to commit, working tree cleanLeer la salida larga
La salida predeterminada (también accesible con --long) es el formato detallado y legible por humanos. Sigue un archivo a lo largo de su ciclo de vida para ver cómo aparece cada sección.
Un archivo completamente nuevo que Git nunca ha visto está sin rastrear:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
w3docs.txt
nothing added to commit but untracked files present (use "git add" to track)Después de git add w3docs.txt, el mismo archivo pasa a Changes to be committed — ahora está preparado:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: w3docs.txtUna vez que ejecutas git commit, el árbol de trabajo vuelve a estar limpio. Ahora edita w3docs.txt y crea un segundo archivo new.txt. Un archivo rastreado que modificas aparece bajo Changes not staged for commit, mientras que el archivo completamente nuevo permanece bajo Untracked files:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: w3docs.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
new.txt
no changes added to commit (use "git add" and/or "git commit -a")Ten en cuenta que las sugerencias entre paréntesis son comandos reales y ejecutables: Git te indica cómo deshacer la preparación, descartar cambios o añadir en cada paso.
El formato corto
Una vez que conoces el significado de las secciones, el formato largo se vuelve ruidoso. El indicador -s (o --short) condensa todo a una línea por archivo:
git status -sPara el estado anterior (un archivo rastreado modificado y un archivo nuevo sin rastrear) muestra:
M w3docs.txt
?? new.txtCada entrada tiene un código de estado de dos columnas. La columna izquierda es el área de preparación (el índice) y la columna derecha es el árbol de trabajo:
| Código | Significado |
|---|---|
?? | Archivo sin rastrear. |
A | Añadido al área de preparación (nuevo archivo preparado). |
M | Modificado. Izquierda = el cambio está preparado; derecha = el cambio no está preparado. |
D | Eliminado. |
R | Renombrado. |
Un espacio al inicio significa "sin cambio en esa columna." Así, M significa modificado pero no preparado, M significa que la modificación está preparada, y MM significa un cambio preparado más ediciones adicionales sin preparar en el mismo archivo.
Añade -b para mostrar también la rama actual y su información de seguimiento:
git status -sb## master
M w3docs.txt
?? new.txtSalida para scripts: --porcelain
Si quieres leer git status desde un script, no analices el formato corto o largo — ambos pueden cambiar entre versiones de Git y se ven afectados por la configuración del usuario. Usa --porcelain en su lugar. Garantiza un formato estable y legible por máquinas:
git status --porcelain M w3docs.txt
?? new.txtLas columnas son los mismos códigos de dos caracteres que el formato corto, pero el formato está contractualmente garantizado como estable, lo que lo hace seguro para hooks, verificaciones de CI y prompts de shell. Combínalo con -z para terminar cada entrada con un byte NUL en lugar de una nueva línea, lo que mantiene sin ambigüedad los nombres de archivo que contienen espacios o saltos de línea.
Mostrar archivos ignorados
De forma predeterminada, git status oculta los archivos que coinciden con tus reglas de .gitignore — artefactos de compilación y binarios como .pyc, .obj, .exe o archivos de registro de otro modo ahogarían los cambios reales. Para confirmar que un archivo está siendo ignorado (en lugar de simplemente olvidado), añade --ignored:
git status --ignoredCon un .gitignore que contiene *.log y un debug.log en disco, aparece una sección adicional:
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
debug.logEsta es la forma más rápida de depurar una regla de ignorado que coincide con más — o menos — de lo esperado.
Opciones comunes
| Opción | Descripción |
|---|---|
-s, --short | Salida en formato corto, una línea por archivo. |
-b, --branch | Muestra la rama y la información de seguimiento (funciona con el formato corto). |
--porcelain | Salida en un formato estable y fácil de analizar para scripts; ignora la configuración del usuario. |
--long | Salida en el formato largo (predeterminado). |
-u[<mode>], --untracked-files[=<mode>] | Controla los archivos sin rastrear: no no muestra ninguno, normal muestra archivos y directorios, all también lista archivos dentro de directorios sin rastrear. |
--ignored | También muestra los archivos ignorados por .gitignore. |
--ignore-submodules[=<when>] | Ignora los cambios en submódulos. <when> puede ser none, untracked, dirty o all. |
-z | Termina las entradas con un byte NUL (implica --porcelain si no se especifica ningún formato). |
--column[=<options>], --no-column | Muestra los archivos sin rastrear en columnas. |
Por qué revisar el estado con frecuencia
Es una buena práctica ejecutar git status antes de cada git add y git commit. Una verificación rápida detecta los errores más comunes: hacer commit de un archivo que olvidaste preparar, preparar accidentalmente un archivo de depuración o hacer commit en la rama incorrecta. Dado que status solo lee el repositorio y nunca cambia nada, ejecutarlo siempre es seguro.
Una vez que hayas leído el estado, los pasos naturales siguientes son inspeccionar los cambios exactos con git diff, deshacer un error de preparación con git reset o, si aún no has comenzado, crear el repositorio con git init.