Diferencias y uso de git add y git commit para registrar cambios
En los artículos anteriores, aprendimos desde la instalación de Git y la creación de repositorios en GitHub, hasta cómo clonar el repositorio de otra persona en nuestro PC con `git clone`. Ahora ya estás en la línea de salida para empezar a desarrollar con Git y GitHub.
Esta vez, nos centraremos en dos comandos cruciales para registrar cambios, `git add` y `git commit`, que son los que usarás con más frecuencia en tu trabajo de desarrollo. Es fácil pensar "¿no son ambos comandos para guardar cambios?", pero en realidad tienen roles completamente diferentes. Entender esta diferencia es clave para dominar Git. ¡Vamos a ello!
Conceptos básicos de Git: Revisando los 3 "lugares"
Para entender la diferencia entre `git add` y `git commit`, primero repasemos el concepto de los "tres lugares" del flujo de trabajo básico de Git. Este concepto nos ayudará a clarificar el papel de cada uno de los dos comandos.
- Directorio de trabajo (Working Directory): Es la carpeta en tu PC donde realmente editas los archivos.
- Área de preparación (Staging Area): Es como una "sala de espera" donde colocas temporalmente los cambios que quieres registrar (hacer commit).
- Repositorio local (Local Repository): Es el lugar donde los cambios del área de preparación se registran y almacenan como un historial formal (un commit).
Quizás sea más fácil de entender si comparamos este flujo con ir de compras:
- Caminas por la tienda y coges productos (haces cambios en los archivos) (trabajo en el Directorio de trabajo).
- Pones en el carrito de la compra los productos que quieres comprar (con
git addlos añades al Área de preparación). - Vas a la caja, pagas por todos los productos del carrito y confirmas la compra (con
git commitlo registras en el Repositorio local).
Como puedes ver, `git add` es una operación de selección, como "añadir al carrito", mientras que `git commit` es una operación de registro, como "confirmar la compra". Sus roles son completamente distintos.
El papel de `git add`: "Elegir" los cambios a confirmar
El papel principal del comando `git add` es seleccionar solo los cambios del directorio de trabajo que quieres incluir en el próximo commit y enviarlos al área de preparación. ¿Por qué es necesario este paso intermedio?
La razón es para dejar un historial de cambios en unidades con significado. Por ejemplo, imagina que estás trabajando en dos tareas diferentes al mismo tiempo: "corregir un error tipográfico en el encabezado" y "desarrollar una nueva función para el pie de página". Si agrupas estos dos cambios en un solo commit, cuando revises el historial más adelante, te resultará difícil saber "qué hacía exactamente este commit".
Aquí es donde entra en juego `git add`. Primero, puedes usar `git add` para registrar solo el archivo con el error tipográfico corregido y hacer un commit. Después, puedes usar `git add` para los archivos de la función del pie de página y registrarlos en otro commit. De esta manera, tu historial de cambios será mucho más limpio y organizado. Por lo tanto, `git add` es un paso crucial para mejorar la calidad de tus commits.
El papel de `git commit`: "Registrar" los cambios
El papel del comando `git commit` es guardar de forma permanente todas las modificaciones que se encuentran en el área de preparación como un único "punto de guardado" en el repositorio local. Esta es la operación central de la gestión de versiones en Git.
Los commits siempre deben ir acompañados de un "mensaje de commit". Es una nota breve que explica "qué se ha modificado" en ese punto de guardado. Escribir buenos mensajes de commit es extremadamente importante para que tanto tú en el futuro como otros miembros del equipo puedan entender el historial.
git commit -m "Corregir el enlace de navegación del encabezado"
En el momento en que ejecutas este comando, el contenido del área de preparación se captura como una instantánea y se registra en el repositorio con un ID único. Una vez que un historial ha sido "commiteado", no desaparecerá a menos que lo manipules intencionadamente.
¡En la práctica! Cómo usar add y commit
Ahora, vamos a usar la carpeta `my-first-repo` para ver cómo se comportan `git add` y `git commit` con operaciones de archivo reales.
Preparación: Modificar dos archivos a la vez
Primero, edita y guarda los archivos `index.html` y `style.css`.
- `index.html`: Haz algún cambio, como añadir una etiqueta `
`.
- `style.css`: Haz algún cambio, como añadir un estilo para el `body`.
Si ejecutas `git status` en este estado, te informará de que se han modificado dos archivos.
git status
Caso 1: Hacer commit de un solo archivo
Este es un escenario en el que "quieres hacer commit solo de los cambios del HTML primero". Con `git add`, especifica solo el archivo del que quieres hacer commit.
git add index.html
Si miras el `git status` en este momento, verás que solo `index.html` ha sido preparado (staged), mientras que `style.css` todavía permanece en el directorio de trabajo.
[Imagen: Resultado de git status, mostrando index.html en verde y style.css en rojo.]
Ahora, ejecuta el commit en este estado.
git commit -m "Actualizar la estructura HTML"
Con esto, solo se han registrado los cambios de `index.html`. Si ejecutas `git status` de nuevo, verás que solo quedan los cambios de `style.css`.
Caso 2: Hacer commit de todos los cambios a la vez
A continuación, vamos a intentar hacer commit de los cambios restantes de `style.css` y de un nuevo archivo `script.js` a la vez. Primero, crea el nuevo archivo.
echo "console.log('Hello, Git!');" > script.js
Luego, usa `git add .` para preparar todos los cambios en el directorio actual (la modificación de `style.css` y la nueva adición de `script.js`) de una sola vez.
git add .
Finalmente, haz commit de todos estos cambios juntos.
git commit -m "Ajustar estilos de CSS y añadir archivo JS"
Con esto, todos los cambios se han registrado y el directorio de trabajo está limpio. Si ejecutas `git status`, debería aparecer "nothing to commit, working tree clean".