¿Qué es Git?
Git es un sistema de control de versiones: una herramienta que guarda el historial de cambios de tu proyecto. Te permite ver qué cambió, cuándo y por qué, volver atrás a una versión anterior y colaborar con otras personas sin pisaros el trabajo.
No confundas Git (la herramienta) con GitHub (un servicio web para alojar repositorios Git en la nube y colaborar). Git funciona perfectamente sin GitHub; GitHub es uno de muchos lugares donde publicar tu repositorio.
El flujo básico: tres zonas
Git organiza tu trabajo en tres zonas. Entender este flujo es la clave de todo:
- Working directory (directorio de trabajo): tus archivos tal y como los editas. Aquí escribes código.
- Staging area (área de preparación o índice): una "sala de espera" donde colocas los cambios que quieres incluir en la próxima foto.
- Repository (repositorio): el historial de commits. Cada commit es una foto permanente del proyecto en un momento dado.
[Working dir] --git add--> [Staging] --git commit--> [Repositorio]
editas aquí preparas historial
Comandos esenciales
git init # crea un repositorio Git en la carpeta actual
git status # muestra qué archivos cambiaron y su zona
git add archivo.js # mueve un archivo al staging
git add . # mueve TODOS los cambios al staging
git commit -m "Mensaje" # crea una foto con los cambios preparados
git log # lista el historial de commits
git log --oneline # historial resumido (una línea por commit)
El mensaje de commit describe qué y por qué cambiaste algo. Un buen
mensaje en presente e imperativo: "Añade validación al formulario de login".
Ramas (branches) y merge
Una rama es una línea de desarrollo independiente. La rama principal suele
llamarse main. Crear una rama te permite trabajar en una funcionalidad nueva
sin tocar el código estable, y luego fusionarla (merge) cuando esté
lista.
git branch # lista las ramas (la actual va marcada con *)
git branch nueva-funcion # crea una rama nueva
git checkout nueva-funcion # cambia a esa rama
git checkout -b nueva-funcion # crea Y cambia a la rama en un solo paso
# ... haces commits en la rama ...
git checkout main # vuelves a main
git merge nueva-funcion # fusionas los cambios de la rama en main
En Git moderno también puedes usar
git switch(cambiar de rama) ygit switch -c(crear y cambiar), una alternativa más clara acheckout.
.gitignore: lo que NO se versiona
No todo debe entrar en el historial. Las dependencias instaladas
(node_modules), los archivos de configuración local y los secretos no se
versionan: ocupan mucho, se regeneran o son privados. Para excluirlos creas un
archivo llamado .gitignore:
# .gitignore
node_modules/
.env
dist/
*.log
node_modules se reconstruye con npm install a partir del package.json,
así que versionarlo no aporta nada y solo añade ruido.
Remotos y GitHub
Un remoto es una copia del repositorio alojada en otro sitio (por ejemplo, GitHub). Te permite hacer copia de seguridad y colaborar.
git remote add origin https://github.com/usuario/repo.git # enlaza el remoto
git push -u origin main # sube tus commits al remoto (primera vez con -u)
git push # sube los commits siguientes
git pull # trae y fusiona los cambios del remoto
git clone https://github.com/usuario/repo.git # copia un repo existente
El nombre origin es la convención para el remoto principal. push envía tu
trabajo a GitHub; pull trae lo que otras personas hayan subido. Así un equipo
mantiene el código sincronizado.