Saltar al contenido principal

🌿 ¿Qué es Git?

📖 Definición

Git es un sistema de control de versiones distribuido. Rastrea y gestiona el historial de cambios de código y permite que múltiples desarrolladores trabajen simultáneamente. GitHub, GitLab y Bitbucket son servicios que alojan repositorios Git, facilitando la colaboración y el intercambio de código.

🎯 Comprender con Analogía

Puntos de Guardado de Juego

Piensa en Git como el sistema de guardado de un juego:

  • Commit: Guardado del juego - guarda el estado actual
  • Branch: Mundo paralelo - probar diferentes opciones mientras mantienes la historia principal
  • Merge: Combinar mundos paralelos - aplicar buenos resultados a la historia principal
  • Revert: Volver a guardado anterior - recuperar cuando cometes errores

⚙️ Cómo Funciona

Las 3 Áreas de Git

Working Directory (Directorio de trabajo)
↓ git add
Staging Area (Área de preparación)
↓ git commit
Repository (Repositorio)
↓ git push
Remote Repository (Repositorio remoto)

Flujo de Trabajo Git

1. Modificar archivos (Working Directory)
2. Preparar cambios (Staging Area) → git add
3. Crear commit (Local Repository) → git commit
4. Enviar a remoto (Remote Repository) → git push

💡 Ejemplos Reales

Comandos Básicos de Git

# Inicializar repositorio Git
git init
# O clonar repositorio remoto
git clone https://github.com/username/repo.git

# Verificar estado
git status

# Preparar cambios
git add index.html # Archivo específico
git add . # Todos los archivos

# Crear commit
git commit -m "feat: Añadir inicio de sesión de usuario"

# Push (subir)
git push origin main

# Pull (descargar)
git pull origin main

Operaciones con Ramas

# Verificar ramas
git branch

# Crear nueva rama
git branch feature-login

# Cambiar rama
git checkout feature-login
# O crear y cambiar simultáneamente
git checkout -b feature-login

# Método más reciente (Git 2.23+)
git switch feature-login
git switch -c feature-login

# Fusionar rama
git checkout main
git merge feature-login

# Eliminar rama
git branch -d feature-login

Escenario de Colaboración

# === Desarrollador A ===
# 1. Clonar repositorio
git clone https://github.com/team/project.git

# 2. Crear nueva rama de función
git checkout -b feature-payment

# 3. Escribir código y hacer commit
git add .
git commit -m "Implementar función de pago"

# 4. Enviar a remoto
git push origin feature-payment

# 5. Crear Pull Request en GitHub

# === Desarrollador B ===
# 1. Sincronizar código más reciente
git checkout main
git pull origin main

🤔 Preguntas Frecuentes

P1. ¿Cuál es la diferencia entre Git y GitHub?

R:

Git (Herramienta)
├─ Sistema de control de versiones (software)
├─ Funciona en computadora local
├─ Se usa vía línea de comandos (CLI)
└─ Gratis, código abierto

GitHub (Servicio)
├─ Servicio de alojamiento de repositorios Git
├─ Plataforma basada en web
├─ Funciones de colaboración (PR, Issue, Wiki)
└─ Compartir código y código abierto

Analogía: Git = Procesador de texto, GitHub = Google Docs

P2. ¿Cómo escribir mensajes de commit?

R: Sigue convenciones claras y consistentes:

# ✅ Buenos mensajes de commit
git commit -m "feat: Añadir API de inicio de sesión de usuario"
git commit -m "fix: Resolver error de clic en botón de registro"
git commit -m "refactor: Eliminar código duplicado y separar funciones"

# ❌ Malos mensajes de commit
git commit -m "actualizar"
git commit -m "corregido bug"
git commit -m "trabajo en progreso..."

# Reglas de Conventional Commits
feat: Nueva función
fix: Corrección de errores
docs: Cambios en documentación
style: Formato de código
refactor: Refactorización de código
test: Añadir pruebas
chore: Construcción, cambios de configuración

P3. ¿Diferencia entre Merge y Rebase?

R:

# Merge
# - Preserva el historial de ramas tal cual
# - Crea commit de fusión
git checkout main
git merge feature-login

Resultado:
A---B---C---D main
\ /
E-----F feature-login

# Rebase
# - Mueve rama a base diferente
# - Mantiene historial lineal
git checkout feature-login
git rebase main

Resultado:
A---B---C---D main
\
E'---F' feature-login

# ¿Cuándo usar?
Merge: Colaboración en equipo, Pull Request
Rebase: Limpieza de rama personal, historial limpio

P4. ¿Cómo resolver Conflictos?

R:

# Ocurre conflicto
git merge feature-login
# CONFLICT (content): Merge conflict in index.html

# Verificar archivos en conflicto
git status

# Abrir archivo y resolver manualmente
# <h1>Título Final</h1>

# Marcar como resuelto
git add index.html
git commit -m "Merge branch 'feature-login' - resuelto conflicto de título"

# Cancelar fusión si es necesario
git merge --abort

🎬 Resumen

Git es una herramienta esencial para el desarrollo moderno:

  • Control de Versiones: Rastrea todo el historial de cambios
  • Colaboración: Múltiples desarrolladores trabajan simultáneamente
  • Rama: Experimentación segura y desarrollo de funciones
  • Recuperación: Volver al estado anterior en cualquier momento

¡Dominar Git permite gestionar código con confianza y colaborar eficientemente en equipo! 🌿✨