DevPath · Aprende a programar ESPTEN

Node.js, npm y testing

Control de versiones con Git

¿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:

  1. Working directory (directorio de trabajo): tus archivos tal y como los editas. Aquí escribes código.
  2. Staging area (área de preparación o índice): una "sala de espera" donde colocas los cambios que quieres incluir en la próxima foto.
  3. 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) y git switch -c (crear y cambiar), una alternativa más clara a checkout.

.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.

Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Testing y TDDCalidad y empaquetado →