Qué es el control de versiones
Imagina un Ctrl+Z infinito para todo tu proyecto. No solo para el último carácter que escribiste, sino para cualquier punto del historial: ayer por la mañana, la semana pasada, antes de ese cambio que lo rompió todo. Eso es control de versiones. Git guarda una línea de tiempo de tu proyecto, y cada vez que guardas (un "commit"), creas un punto al que siempre puedes volver.
🧠 Analogía: un Ctrl+Z infinito
En un editor de texto, Ctrl+Z deshace lo último que escribiste. Pero si cierras el programa, el historial desaparece. Git es como un Ctrl+Z que nunca se aplica y funciona para todo el proyecto.
- •Cada vez que guardas, se convierte en una foto del proyecto en ese momento
- •Puedes mirar cualquier foto antigua y ver qué cambió
- •Si algo se rompe, vuelves a la instantánea en la que todo estaba bien
- •No se pierde nada: todo el historial queda guardado
💡 Por qué existe Git
Antes de Git, la gente guardaba carpetas llamadas projeto-final, projeto-final-2, projeto-final-AGORA-VAI. Un desastre. Git lo resuelve: guarda todas las versiones de forma organizada, muestra exactamente qué cambió entre una y otra y permite que varias personas trabajen en el mismo proyecto sin estorbarse.
Instalando y configurando Git
Antes de usar Git, necesitas instalarlo y decir quién eres (nombre y email). Esto se hace una sola vez por computadora. Cada sistema operativo tiene su manera, pero al final el resultado es el mismo: el comando git empieza a funcionar en la terminal.
Windows
Descarga el instalador oficial y sigue el «Next, Next, Next»
# Accede al sitio oficial en el navegador
https://git-scm.com/download/win
# Ejecuta el instalador. Acepta las opciones predeterminadas.
# Viene incluido "Git Bash", una terminal solo para Git.
macOS
A través de Homebrew o de las herramientas de desarrollador
# Opción 1: con Homebrew (recomendado)
$ brew install git
# Opción 2: herramientas de Apple
$ xcode-select --install
Linux
Desde el administrador de paquetes de tu distribución
# Ubuntu / Debian
$ sudo apt install git
# Fedora
$ sudo dnf install git
Revisa la instalación y configura quién eres
# Confirma que Git está instalado
$ git --version
git version 2.43.0
# Dile a Git tu nombre (aparece en cada commit)
$ git config --global user.name "Tu Nombre"
# Dile a Git tu correo electrónico
$ git config --global user.email "tú@email.com"
# Revisa lo que quedó configurado
$ git config --list
user.name=Seu Nome
user.email=voce@email.com
O --global vale para todos los proyectos de tu computadora. Solo lo haces una vez.
⚠️ Error común
Problema: Escribes git --version y aparece "git: command not found" (o "no se reconoce como comando").
Solución: Git no se instaló, o la terminal antigua no «vio» la instalación. Cierra la terminal y vuelve a abrirla. Si aun así no funciona, repite la instalación de tu sistema operativo siguiendo los pasos anteriores.
El ciclo básico: init, add, commit
Hay un ciclo de tres pasos que vas a repetir mil veces en la vida: iniciar el control de versiones en una carpeta, preparar los archivos que cambiaron, y hacer commit (guardar la foto). Piensa en cada commit como tomar una foto del proyecto: tú eliges qué entra en la foto y luego la tomas con una leyenda.
git init - Iniciar el control de versiones
Dentro de la carpeta del proyecto, este comando crea un repositorio Git (una carpeta oculta .git) que guardará todo el historial.
$ git init
Initialized empty Git repository in /home/usuario/meu-site/.git/
git status - Ver la situación
Muestra qué archivos cambiaron y aún no se guardaron. Úsalo siempre que tengas dudas.
$ git status
On branch main
No commits yet
Untracked files:
index.html
style.css
(usa "git add" para incluirlo en el próximo commit)
Rojo = archivo modificado, pero todavía fuera de la foto.
git add - Elegir qué incluir en la foto
# Agregar un archivo específico
$ git add index.html
# Agregar TODOS los archivos modificados
$ git add .
# Comprueba: ahora aparecen en verde
$ git status
Cambios que se incluirán en el commit:
new file: index.html
new file: style.css
El punto . significa "todo en esta carpeta". Verde = listo para entrar en la foto.
📷 git commit - Tomar la foto
# El -m es el pie de foto (mensaje del commit)
$ git commit -m "Primera versión del sitio"
[main (root-commit) a1b2c3d] Primera versión del sitio
2 files changed, 12 insertions(+)
create mode 100644 index.html
create mode 100644 style.css
¡Listo! La foto se guardó en el historial. El a1b2c3d y es el "código" único de este commit.
✓ Buenos mensajes de commit
- ✓
"Adiciona menu de navegacao" - ✓
"Corrige cor do botao de envio" - ✓Cortas, claras, dicen QUÉ cambió
✗ Mensajes malos
- ✗
"alteracoes"(¿qué cambios?) - ✗
"asdasd"o"." - ✗Commits enormes con 50 archivos mezclados
Entender qué cambió: status, log, diff
Git no solo sirve para guardar. También te cuenta la historia del proyecto: qué cambió ahora, qué cambió con el tiempo y exactamente qué líneas se modificaron. Tres comandos responden estas preguntas: status, log e diff.
git status - Qué cambió ahora
Después de editar un archivo que ya tiene un commit, el estado muestra que se modificó:
$ git status
On branch main
Cambios sin preparar para el commit:
modified: index.html
(usa "git add" para incluirlo en el próximo commit)
git log - La historia completa
Lista todos los commits, del más reciente al más antiguo, con autor, fecha y mensaje:
$ git log
commit 7a8b9c2d (HEAD -> main)
Author: Seu Nome <voce@email.com>
Date: Mon Jun 16 10:20 2026
Arregla los colores del menú
commit a1b2c3d4
Author: Seu Nome <voce@email.com>
Primera versión del sitio
# Versión resumida, una línea por commit
$ git log --oneline
7a8b9c2 Arruma as cores do menu
a1b2c3d Primera versión del sitio
Para salir del log cuando ocupa toda la pantalla, presiona la tecla q.
git diff - Exactamente qué líneas cambiaron
Muestra línea por línea lo que se eliminó (en rojo, con -) y lo que se agregó (en verde, con +):
$ git diff
diff --git a/index.html b/index.html
@@ -3,3 +3,3 @@
- <h1>Hola mundo</h1>
+ <h1>Bienvenido a mi sitio</h1>
Línea con - fue la versión antigua; con + y es la nueva.
👁 Cómo leer la salida en la práctica
- •status antes de hacer commit: "¿qué voy a guardar?"
- •diff antes de agregar: "¿los cambios están bien?"
- •registro después: "¿cómo evolucionó el proyecto?"
Branches: realidades paralelas del proyecto
Una branch (rama) es una copia paralela del proyecto donde puedes probar una idea sin modificar la versión principal. Es como tener un borrador: si la idea funciona, la vuelves a integrar; si sale mal, la descartas y nada se ve afectado.
🧠 Analogía: realidades paralelas
Imagina que pudieras crear un universo paralelo de tu proyecto, probar allí una reforma descabellada y traerla al universo "real" solo si queda bien. La branch main y es la realidad principal (la que se publica); cada rama nueva es un universo de pruebas.
Comandos de branch
# Ver en qué rama estás y cuáles existen
$ git branch
* main
# Crear e ir a una branch nueva de una vez
$ git switch -c nova-cor
Switched to a new branch 'nova-cor'
# ... aquí editas, haces add y commit a gusto ...
# Volver a la rama principal
$ git switch main
Switched to branch 'main'
# Traer los cambios de nueva-cor a main
$ git merge novo-cor
Updating a1b2c3d..7a8b9c2
Fast-forward
✓ Cuándo usar una rama
- ✓Probar una nueva funcionalidad sin romper main
- ✓Probar un diseño diferente
- ✓Trabajar en equipo, cada quien en su propia rama
✗ Qué evitar
- ✗Hacer todo directamente en main en proyectos serios
- ✗Dejar que se acumulen ramas antiguas sin hacer merge
- ✗Cambiar de rama con cambios sin guardar
.gitignore: O Que Nunca Versionar
No todo debe incluirse en Git. Las contraseñas, los archivos generados automáticamente y las carpetas enormes de dependencias solo estorban (y pueden ser peligrosos). El archivo .gitignore es una lista de lo que Git debe ignorar por completo: finge que estos archivos ni siquiera existen.
⚠️ Error común (y peligroso)
Problema: Haces commit de un archivo .env con la contraseña de la base de datos y lo subes a GitHub. Ahora la contraseña es pública para todo el mundo.
Solución: Crea el .gitignore antes del primer commit y agrega .env en él. Git nunca versionará este archivo y la contraseña quedará solo en tu máquina.
node_modules
Dependencias (enorme)
.env
Contraseñas y claves
dist / build
Archivos generados
.DS_Store
Archivos basura del sistema
Ejemplo de archivo .gitignore
Crea el archivo en la raíz del proyecto (touch .gitignore) y coloca dentro una regla por línea:
# Dependencias instaladas
node_modules/
# Variables de entorno y contraseñas
.env
.env.local
# Archivos generados por el build
dist/
build/
# Basura del sistema operativo
.DS_Store
Thumbs.db
# Logs
*.log
La barra / al final indica una carpeta. El * en *.log significa "cualquier archivo que termine en .log".
💡 Consejo: no hace falta memorizar
Hay .gitignore listos para cada tipo de proyecto en el sitio gitignore.io. Escribes "node", "python", etc., y genera el archivo completo. Al principio, copia desde ahí y ve aprendiendo qué hace cada línea.
📚 Resumen del módulo
Siguiente módulo:
1.3 - GitHub y Pages (sube tu código a la nube y publica tu sitio gratis)