¿Qué estados puede tener un archivo en Git?
Ver respuesta — intenta responderla en voz alta primero
Un archivo puede estar untracked (Git no lo sigue todavía), modified (cambió respecto al último commit pero no está preparado), staged (preparado para el próximo commit con git add) o committed (ya guardado en el repositorio, sin cambios pendientes). Un archivo va pasando por estos estados a medida que lo editas y lo confirmas.
Piensa en el ciclo de vida de un archivo:
- Untracked (sin seguimiento): el archivo es nuevo; Git lo ve pero no lo está versionando. Aparece cuando acabas de crearlo y nunca lo has añadido.
- Modified (modificado): Git ya conocía el archivo, pero lo editaste desde el último commit. El cambio existe en el working directory, pero aún no está preparado.
- Staged (preparado): hiciste
git addy el archivo (o su cambio) está listo para entrar en el próximo commit. - Committed (confirmado): el archivo está guardado en el repositorio y coincide con el último commit; no tiene cambios pendientes. Se le suele llamar "tracked y unmodified".
git status te dice el estado de cada archivo, con colores: rojo para lo que no está en staging, verde para lo que sí.
# Creas un archivo nuevo -> queda UNTRACKED
echo "hola" > nota.txt
git status
# "Untracked files: nota.txt"
# Lo añades -> pasa a STAGED
git add nota.txt
git status
# "Changes to be committed: new file: nota.txt"
# Lo confirmas -> queda COMMITTED
git commit -m "Agrega nota"
# Lo editas de nuevo -> pasa a MODIFIED
echo "otra linea" >> nota.txt
git status
# "Changes not staged for commit: modified: nota.txt"
Confundir untracked con modified. Un archivo untracked es totalmente nuevo (Git nunca lo ha guardado); un archivo modified es uno que Git ya conocía y que cambió. También es común no darse cuenta de que un archivo puede estar a la vez "staged" (por un cambio) y "modified" (por otro cambio nuevo) si lo editas después de hacer git add.
"Un archivo puede estar untracked, cuando Git aún no lo sigue; modified, cuando lo edité desde el último commit pero no lo he preparado; staged, cuando ya hice
git addy está listo para el próximo commit; y committed, cuando ya está guardado en el repositorio sin cambios pendientes. Congit statusveo el estado de cada archivo en cualquier momento."
Haces git add archivo.txt y luego lo vuelves a editar sin hacer otro add. ¿En qué estado queda?
Ver respuesta
Queda en dos estados a la vez. La versión que preparaste con git add sigue staged, pero los cambios nuevos que hiciste después están modified (sin preparar). Si haces git commit, solo se guarda la versión que estaba en staging; los cambios posteriores quedan pendientes hasta un nuevo git add.