Git: del archivo editado al historial compartido
Git es un sistema de control de versiones distribuido. Cada repositorio local conserva objetos y referencias para reconstruir versiones, comparar cambios y desarrollar líneas de trabajo paralelas. GitHub es un servicio que puede alojar una copia remota; Git funciona también sin él y sin conexión a Internet.
Para comenzar en una carpeta nueva, git init crea el repositorio; no confirma automáticamente sus archivos. Un remoto suele llamarse origin por convención y conecta la historia local con un alojamiento externo.
Tres lugares, tres estados
El directorio de trabajo contiene los archivos que editas. El índice o staging area representa el contenido seleccionado para el próximo commit. El repositorio conserva los commits creados. Un commit registra una instantánea del contenido preparado, metadatos y referencias a sus padres. Preparar un archivo no lo publica ni lo convierte todavía en un commit.
Si corriges un formulario y cambias el color del encabezado, puedes preparar solamente el formulario y guardar un commit dedicado a esa corrección. Si vuelves a modificarlo después de git add, el índice mantiene la versión previamente preparada hasta que lo actualices otra vez.
Un flujo verificable
git status
git diff
git add formulario.js
git diff --staged
git commit -m "Corrige la validación del formulario"
git push origin main
git diff revisa cambios sin preparar; git diff --staged muestra lo que entrará al commit. git push intenta actualizar referencias del remoto y transferir los objetos necesarios. Puede ser rechazado si la rama remota avanzó o si una política exige revisión.
Ramas e integración
Una rama es una referencia móvil a un commit. git switch -c nueva-funcion crea una rama y cambia a ella. Integrar con git merge reúne historias: a veces basta con adelantar la referencia; otras veces se crea un commit de fusión. Si hay cambios incompatibles, debes resolver los conflictos, revisar el resultado y completar la integración.
git clone crea una copia local de un repositorio existente. git fetch descarga objetos y actualiza referencias de seguimiento remoto sin integrar cambios en tu rama actual. git pull combina descarga e integración, mediante merge o rebase según sus opciones y configuración.
Consultar y deshacer
git log muestra la historia. git restore recupera contenido y puede descartar cambios sin confirmar; git revert crea un commit que invierte cambios previos conservando la historia compartida. git reset puede mover una rama y, según el modo, modificar también el índice o el directorio de trabajo. No son intercambiables: hay que identificar qué estado se quiere conservar.
Conviene organizar commits por intención y revisar el índice antes de confirmar. La secuencia editar, preparar, confirmar y publicar sirve como base, pero colaborar también exige comprender qué historia se integra. La documentación de Git explica este modelo de instantáneas y los tres estados.