📚

Git & GitHub

🧑‍🎓 Aprendiz

¿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 piensasLo 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ónSin GitCon Git
La IA malinterpretó tu prompt y borró código importante😱 Perdidogit checkout -- .
El agente "mejoró" algo que funcionaba y ahora no compila😱 A reescribirgit diff para ver qué cambió
Pediste un cambio pequeño y modificó 15 archivos😱 Caosgit stash y empiezas de nuevo
Después de 5 prompts, todo está peor que al inicio😱 Frustracióngit 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 init es 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:

GitGitHub
¿Qué es?Software en tu computadoraSitio 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 sourceGratis + planes de pago
¿Se necesitan mutuamente?Git funciona sin GitHubGitHub 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:

UsoEjemplo
📸 Historial completoVer exactamente qué cambió, cuándo y por qué
Volver en el tiempo"Ayer funcionaba, ¿qué rompí hoy?"
🔀 Experimentar sin miedoCrear branches para probar ideas locas
🔍 Encontrar bugs"¿En qué commit se introdujo este error?"
📝 Documentar decisionesLos mensajes de commit son documentación

GitHub (remoto) te permite:

UsoEjemplo
☁️ Backup en la nubeSi te roban la laptop, tu código está seguro
👥 ColaborarVarios devs trabajando en el mismo proyecto
🔍 Code reviewPull Requests para revisar antes de integrar
🌐 PortfolioTu perfil muestra tu actividad y proyectos
🚀 Deploy automáticoGitHub 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ónSin GitHubCon GitHub
Tu códigoPerdido para siempreHaces git clone y sigues
HistorialPerdidoIntacto en la nube
Tiempo perdidoSemanas/meses de trabajo5 minutos en clonar

Moraleja: Git local + GitHub remoto = tranquilidad.


Instalación

SistemaComando
macOSbrew install git
Linuxsudo apt install git
Windowswinget 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

ConceptoQué esAnalogía
RepositoryCarpeta con historial GitÁlbum de fotos
CommitFoto del estado actualFoto fechada en el álbum
BranchLínea alternativa de desarrolloBorrador de un capítulo
MergeUnir dos branchesIntegrar el borrador al libro
RemoteConexión a GitHub/GitLabCopia en la nube
CloneDescargar repo remotoCopiar álbum del banco
PushSubir commits al remotoLlevar fotos nuevas al banco
PullBajar commits del remotoTraer 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 peligrosaConsecuencia
Agregar .env al commitTus API keys quedan públicas
Crear archivo con credenciales hardcodeadasCualquiera puede verlas en GitHub
"Mejorar" código moviendo secrets a archivos nuevosEl .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 .env esté en .gitignore ANTES del primer commit.


💼 GitHub como portfolio profesional

Tu perfil de GitHub es más importante de lo que crees:

SituaciónQué miran
Aplicar a trabajoReclutadores revisan tu GitHub antes de la entrevista
FreelanceClientes quieren ver proyectos reales funcionando
LicitacionesLas 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