¿Por qué desde el primer proyecto?
"Es solo un proyectito pequeño, no necesito Git..."
Error. Usa Git desde el día 1, aunque sea un script de 10 líneas. ¿Por qué?
| Lo que piensas | Lo que pasa en realidad |
|---|---|
| "Es muy simple" | Crece más de lo esperado |
| "Me acuerdo de todo" | En 2 semanas no recuerdas por qué cambiaste algo |
| "Tengo backup en Drive" | Drive no te dice qué cambió entre versiones |
| "Lo configuro después" | "Después" nunca llega, y cuando lo necesitas es tarde |
🤖 Git te salva de la IA
Esto es crítico si usas asistentes de código como Cursor, Claude Code, o Copilot:
| Situación | Sin Git | Con Git |
|---|---|---|
| La IA malinterpretó tu prompt y borró código importante | 😱 Perdido | git checkout -- . |
| El agente "mejoró" algo que funcionaba y ahora no compila | 😱 A reescribir | git diff para ver qué cambió |
| Pediste un cambio pequeño y modificó 15 archivos | 😱 Caos | git stash y empiezas de nuevo |
| Después de 5 prompts, todo está peor que al inicio | 😱 Frustración | git reset --hard HEAD~5 |
⚠️ Realidad: Los agentes de IA son poderosos pero cometen errores. Un prompt ambiguo puede resultar en cambios destructivos. Git es tu red de seguridad.
Flujo recomendado con IA:
# ANTES de pedirle algo a la IA
git add . && git commit -m "Checkpoint antes de cambios con IA"
# Si la IA rompe algo
git diff # Ver qué cambió
git checkout -- archivo.js # Revertir un archivo
git reset --hard HEAD # Revertir TODO al último commit
Nuestra recomendación:
git inites el PRIMER comando en cualquier proyecto. Antes de escribir código, antes de instalar dependencias. Primero Git.
Git ≠ GitHub: La diferencia fundamental
Antes de ver comandos, entiende esto:
| Git | GitHub | |
|---|---|---|
| ¿Qué es? | Software en tu computadora | Sitio web / servicio en la nube |
| ¿Dónde vive? | Local (tu máquina) | Remoto (internet) |
| ¿Quién lo creó? | Linus Torvalds (2005) | Microsoft (comprado en 2018) |
| ¿Costo? | Gratis, open source | Gratis + planes de pago |
| ¿Se necesitan mutuamente? | Git funciona sin GitHub | GitHub necesita Git |
Analogía: Git es tu diario personal donde escribes todos los días. GitHub es la caja de seguridad del banco donde guardas una copia.
¿Para qué sirven realmente?
Git (local) te permite:
| Uso | Ejemplo |
|---|---|
| 📸 Historial completo | Ver exactamente qué cambió, cuándo y por qué |
| ⏪ Volver en el tiempo | "Ayer funcionaba, ¿qué rompí hoy?" |
| 🔀 Experimentar sin miedo | Crear branches para probar ideas locas |
| 🔍 Encontrar bugs | "¿En qué commit se introdujo este error?" |
| 📝 Documentar decisiones | Los mensajes de commit son documentación |
GitHub (remoto) te permite:
| Uso | Ejemplo |
|---|---|
| ☁️ Backup en la nube | Si te roban la laptop, tu código está seguro |
| 👥 Colaborar | Varios devs trabajando en el mismo proyecto |
| 🔍 Code review | Pull Requests para revisar antes de integrar |
| 🌐 Portfolio | Tu perfil muestra tu actividad y proyectos |
| 🚀 Deploy automático | GitHub Actions, Vercel, etc. |
¿Cuándo necesitas solo Git?
✅ Solo Git es suficiente cuando:
- Trabajas solo en tu máquina
- El proyecto es personal/experimental
- No necesitas backup remoto (pero deberías...)
- Estás aprendiendo
¿Cuándo necesitas GitHub?
✅ Agrega GitHub cuando:
- Quieres backup (¡siempre recomendado!)
- Trabajas en equipo
- El proyecto es open source
- Quieres mostrar tu trabajo (portfolio)
- Necesitas CI/CD (tests automáticos, deploy)
Escenario real: Te roban la laptop 💻🔓
| Situación | Sin GitHub | Con GitHub |
|---|---|---|
| Tu código | Perdido para siempre | Haces git clone y sigues |
| Historial | Perdido | Intacto en la nube |
| Tiempo perdido | Semanas/meses de trabajo | 5 minutos en clonar |
Moraleja: Git local + GitHub remoto = tranquilidad.
Instalación
| Sistema | Comando |
|---|---|
| macOS | brew install git |
| Linux | sudo apt install git |
| Windows | winget install Git.Git |
Configuración inicial
# Identidad (aparece en cada commit)
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
# Branch por defecto
git config --global init.defaultBranch main
# Editor para mensajes largos
git config --global core.editor "code --wait"
Conceptos clave
| Concepto | Qué es | Analogía |
|---|---|---|
| Repository | Carpeta con historial Git | Álbum de fotos |
| Commit | Foto del estado actual | Foto fechada en el álbum |
| Branch | Línea alternativa de desarrollo | Borrador de un capítulo |
| Merge | Unir dos branches | Integrar el borrador al libro |
| Remote | Conexión a GitHub/GitLab | Copia en la nube |
| Clone | Descargar repo remoto | Copiar álbum del banco |
| Push | Subir commits al remoto | Llevar fotos nuevas al banco |
| Pull | Bajar commits del remoto | Traer fotos que otros subieron |
Flujo de trabajo
Solo Git (local)
# Crear repositorio
git init mi-proyecto
cd mi-proyecto
# Trabajar...
echo "# Mi Proyecto" > README.md
# Ver qué cambió
git status
# Agregar al staging
git add README.md # archivo específico
git add . # todos los cambios
# Crear commit
git commit -m "Inicial: agrega README"
# Ver historial
git log --oneline
Git + GitHub (local + remoto)
# Conectar con GitHub (una vez)
git remote add origin https://github.com/tu-usuario/tu-repo.git
# Subir tu código
git push -u origin main
# Después de cada sesión de trabajo:
git add .
git commit -m "Describe qué hiciste"
git push
Branches: Experimentar sin miedo
# Crear branch para nueva feature
git checkout -b feature/login
# Trabajar en la feature...
git add .
git commit -m "Agrega formulario de login"
# Volver a main
git checkout main
# Integrar la feature
git merge feature/login
# Borrar branch (ya no la necesitas)
git branch -d feature/login
GitHub CLI (gh)
# Instalar
brew install gh
# Autenticar (abre navegador)
gh auth login
# Clonar repo
gh repo clone usuario/repo
# Crear repo desde carpeta actual
gh repo create mi-proyecto --public --source=.
# Crear Pull Request
gh pr create --fill
Comandos de emergencia
# "La cagué, quiero volver al último commit"
git checkout -- .
# "Quiero ver cómo estaba hace 3 commits"
git checkout HEAD~3
# "¿Quién escribió esta línea?"
git blame archivo.js
# "¿En qué commit se rompió?"
git bisect start
git bisect bad # el actual está mal
git bisect good abc123 # este commit estaba bien
# Git encuentra el culpable automáticamente
Resumen visual
TU COMPUTADORA GITHUB (NUBE)
────────────── ─────────────
📁 Working Directory
│
│ git add
▼
📦 Staging Area
│
│ git commit
▼
📚 Local Repository ──── git push ───▶ ☁️ Remote Repository
◀── git pull ────
🔐 .gitignore: Tu escudo contra filtraciones
El archivo .gitignore le dice a Git qué archivos NUNCA debe rastrear. Esto es CRÍTICO para seguridad.
⚠️ Peligro real: La IA y tus secretos
Los asistentes de IA (Cursor, Claude Code, Copilot) pueden accidentalmente:
| Situación peligrosa | Consecuencia |
|---|---|
Agregar .env al commit | Tus API keys quedan públicas |
| Crear archivo con credenciales hardcodeadas | Cualquiera puede verlas en GitHub |
| "Mejorar" código moviendo secrets a archivos nuevos | El .gitignore no los cubre |
🚨 Historia real: Miles de API keys de AWS se filtran cada día en GitHub. Bots escanean repos públicos buscando credenciales. Tu cuenta puede ser hackeada en minutos.
Archivo .gitignore esencial
Crea esto en la raíz de CADA proyecto:
# .gitignore
# Variables de entorno (SECRETS!)
.env
.env.local
.env.*.local
*.env
# Credenciales
credentials.json
*-credentials.json
*.pem
*.key
secrets/
# Dependencias (se reinstalan)
node_modules/
venv/
__pycache__/
# Build (se regenera)
dist/
build/
.next/
.output/
# IDE
.vscode/
.idea/
*.swp
# OS
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
Comandos útiles
# Ver qué está ignorando Git
git status --ignored
# Si ya commiteaste un archivo con secretos 😱
git rm --cached .env
git commit -m "Remove .env from tracking"
# IMPORTANTE: El archivo sigue en el historial!
# Cambia TODAS las credenciales que se filtraron
# Verificar antes de push
git diff --staged # Ver qué vas a subir
Regla de oro
NUNCA pongas credenciales directamente en el código. Usa variables de entorno (
.env) y asegúrate de que.envesté en.gitignoreANTES del primer commit.
💼 GitHub como portfolio profesional
Tu perfil de GitHub es más importante de lo que crees:
| Situación | Qué miran |
|---|---|
| Aplicar a trabajo | Reclutadores revisan tu GitHub antes de la entrevista |
| Freelance | Clientes quieren ver proyectos reales funcionando |
| Licitaciones | Las empresas evalúan calidad de código y documentación |
¿Qué hace un repo "profesional"?
mi-proyecto/
├── README.md # ⭐ CRÍTICO: Qué hace, cómo instalar, screenshots
├── LICENSE # MIT, Apache, etc.
├── .gitignore # Limpio, sin node_modules ni .env
├── docs/ # Arquitectura, decisiones técnicas
│ └── ARCHITECTURE.md
├── src/ # Código organizado
├── tests/ # ⭐ Tests demuestran profesionalismo
└── .github/
└── workflows/ # CI/CD muestra que sabes DevOps
Checklist de repo de portfolio
- README con descripción clara y screenshots/GIFs
- Instrucciones de instalación que FUNCIONAN
- Tests (aunque sean básicos)
- Código limpio y comentado donde hace falta
- Sin secretos ni credenciales (revisa el historial!)
- Commits con mensajes descriptivos (no "fix", "update")
💡 Tip: 3-5 repos públicos bien hechos impresionan más que 50 repos abandonados.
Tu perfil de GitHub
Crea un repo con tu username (ej: alannreyes/alannreyes) con un README.md que aparece en tu perfil:
# 👋 Hola, soy [Tu Nombre]
🔭 Actualmente trabajando en...
🌱 Aprendiendo...
💬 Pregúntame sobre...
📫 Contáctame: tu@email.com
🍳 Practica: Tu primer repositorio
¿Listo para aplicar todo esto?
→ Mi Primer Repositorio — Crea y sube tu primer repo a GitHub paso a paso
📚 Siguiente nivel
→ Git Avanzado & Colaboración — PRs, merge conflicts, rebases y trabajo en equipo
Enlaces útiles
- 📖 Git - Documentación oficial
- 🎓 Learn Git Branching (interactivo)
- 📘 GitHub Docs
- 📘 gitignore.io — Genera .gitignore para tu stack
- 🎥 Git en 15 minutos (video)