¿Qué hacen `git add` y `git commit`, y por qué son dos pasos separados?
Ver respuesta — intenta responderla en voz alta primero
git add prepara (mueve al staging area) los cambios que quieres incluir en el próximo commit. git commit toma lo que está en staging y lo guarda como una foto permanente en el historial, con un mensaje. Son dos pasos para que puedas elegir exactamente qué entra en cada commit.
git add: le dices a Git "quiero incluir estos cambios en el próximo commit". No guarda nada en el historial todavía; solo los mueve al staging area.git commit: toma todo lo que está en staging y crea un commit: una foto del proyecto con un mensaje, un autor y una fecha. Ese commit queda en el historial para siempre.
Que sean dos pasos es una ventaja: te deja armar commits limpios. Puedes editar cinco archivos pero commitear solo dos que van juntos, y dejar los otros para otro commit con su propio mensaje.
La bandera -m te permite escribir el mensaje en la misma línea. Sin ella, Git abre un editor de texto.
# Preparar un archivo específico
git add index.html
# Preparar TODOS los cambios del working directory
git add .
# Confirmar lo que está en staging con un mensaje
git commit -m "Agrega la estructura inicial de la página"
# Salida: [main 1a2b3c4] Agrega la estructura inicial de la página
# 1 file changed, 10 insertions(+)
# Atajo: add + commit de archivos YA rastreados en un solo paso
git commit -am "Corrige el título del encabezado"
# -a añade automáticamente los cambios de archivos ya rastreados
# OJO: -a NO incluye archivos untracked (nuevos)
Usar git commit -am creyendo que incluye archivos nuevos. La bandera -a solo añade cambios de archivos que Git ya rastrea; los archivos untracked (nuevos) hay que añadirlos con git add explícitamente. Otro error clásico: hacer git commit sin git add antes y sorprenderse de que "no hay nada que commitear".
"
git addprepara los cambios que quiero incluir, moviéndolos al staging area, ygit commitlos guarda como una foto permanente en el historial con un mensaje. Son dos pasos a propósito: me dejan armar commits limpios, eligiendo qué archivos van juntos en cada commit. Uso-mpara el mensaje en la misma línea, y a vecescommit -amcomo atajo, pero recordando que eso no incluye archivos nuevos."
Creaste un archivo nuevo estilos.css y modificaste index.html (que ya estaba en Git). Ejecutas git commit -am "cambios". ¿Qué se guarda?
Ver respuesta
Solo se guarda el cambio de index.html. La bandera -a incluye automáticamente los cambios de archivos ya rastreados, pero estilos.css es nuevo (untracked), así que Git lo ignora. Para incluirlo tendrías que hacer git add estilos.css antes del commit.