¿Para qué sirven `git status` y `git diff`, y en qué se diferencian?
Ver respuesta — intenta responderla en voz alta primero
git status te dice el estado de los archivos: en qué rama estás, qué está en staging, qué está modificado y qué es untracked. git diff te muestra el contenido exacto de los cambios, línea por línea. git diff compara working vs staging, y git diff --staged compara staging vs último commit.
Son tus dos herramientas para saber "qué está pasando" antes de commitear.
git status: la vista general. Te dice qué archivos cambiaron y en qué área están (staged o no, tracked o untracked). No muestra el contenido de los cambios, solo los nombres y su estado.git diff: el detalle. Muestra las líneas que agregaste (+) y quitaste (-).git diff(sin nada): compara el working directory contra el staging → los cambios que aún no has hechoadd.git diff --staged(o--cached): compara el staging contra el último commit → lo que sí vas a commitear.
Regla práctica: status para el panorama, diff para revisar exactamente qué vas a guardar.
# Panorama general del repo
git status
# On branch main
# Changes to be committed: (verde, en staging)
# Changes not staged for commit: (rojo, sin preparar)
# Untracked files: (rojo, nuevos)
# Versión resumida y corta
git status -s
# M archivo.txt (modificado, sin stage)
# M otro.txt (modificado, en stage)
# ?? nuevo.txt (untracked)
# Ver cambios que AÚN NO están en staging
git diff
# Ver cambios que YA están en staging (lo que se commiteará)
git diff --staged
# Comparar dos commits
git diff abc1234 def5678
Creer que git diff muestra todos los cambios. Por defecto, git diff no muestra los cambios que ya están en staging: para esos necesitas git diff --staged. Muchos juniors hacen git add ., luego git diff para revisar, ven que sale vacío y se confunden, cuando lo correcto sería git diff --staged.
"
git statusme da el panorama: en qué rama estoy y qué archivos están en staging, modificados o untracked, pero solo los nombres.git diffme muestra el contenido de los cambios línea por línea.git diffa secas compara el working directory con el staging, o sea lo que aún no he preparado; ygit diff --stagedcompara el staging con el último commit, o sea lo que voy a guardar. Uso status para el panorama y diff para revisar el detalle antes de commitear."
Hiciste git add . y quieres revisar exactamente qué líneas vas a commitear. ¿Qué comando usas?
Ver respuesta
git diff --staged (equivalente a git diff --cached). Como los cambios ya están en el staging area, git diff a secas saldría vacío; necesitas --staged para comparar el staging contra el último commit y ver justo lo que se va a guardar.