Skip to content

Introducción a Git y GitHub

En este módulo aprenderás los conceptos fundamentales que necesitas conocer antes de comenzar a trabajar con Git y GitHub. Entenderás qué son, por qué son importantes y cómo pueden mejorar tu flujo de trabajo como desarrollador.

Git es un sistema de control de versiones distribuido creado por Linus Torvalds en 2005. Es una herramienta que te permite rastrear cambios en archivos y coordinar el trabajo entre múltiples personas.

Sistema distribuido
  • Distribuido: Cada desarrollador tiene una copia completa del historial del proyecto
  • Rápido: Operaciones locales extremadamente rápidas
  • Integridad: Usa checksums SHA-1 para garantizar la integridad de los datos
  • Branching: Sistema de ramas ligero y eficiente
  • Staging Area: Área intermedia para preparar commits
  • Open Source: Software libre y gratuito
mi-proyecto/
├── index.html
├── index-backup.html
├── index-final.html
├── index-final-final.html
├── index-ESTE-SI-ES-EL-FINAL.html
└── index-version-que-funciona.html

Problemas:

  • Archivos duplicados innecesarios
  • Confusión sobre cuál es la versión actual
  • Pérdida de historial de cambios
  • Dificultad para colaborar

GitHub es una plataforma de desarrollo colaborativo que utiliza Git para el control de versiones. Es como una red social para desarrolladores donde puedes:

Plataforma colaborativa
  • Alojar repositorios: Almacenar código en la nube
  • Colaborar: Trabajar en equipo en proyectos
  • Issues: Sistema de seguimiento de problemas y tareas
  • Pull Requests: Proponer y revisar cambios
  • Actions: Automatización y CI/CD
  • Pages: Alojar sitios web estáticos
  • Packages: Registro de paquetes
  • Security: Análisis de seguridad y dependencias
CaracterísticaGitHubGitLabBitbucket
Popularidad⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Repositorios privados gratuitos
CI/CD integradoGitHub ActionsGitLab CIPipelines
ComunidadMuy grandeGrandeMediana
Integración con Atlassian

El control de versiones no es solo para programadores. Cualquier proyecto que involucre archivos que cambian con el tiempo puede beneficiarse.

Historial de commits
# Ver historial de cambios
git log --oneline
# Salida ejemplo:
abc1234 Agregar función de búsqueda
def5678 Corregir bug en login
ghi9012 Actualizar documentación
jkl3456 Versión inicial
Revertir cambios
# Volver a una versión anterior
git checkout abc1234
# Revertir un commit específico
git revert def5678
# Deshacer cambios no confirmados
git checkout -- archivo.txt
Trabajo con ramas
# Crear nueva rama para una funcionalidad
git branch nueva-funcionalidad
git checkout nueva-funcionalidad
# O en un solo comando
git checkout -b nueva-funcionalidad
# Trabajar en la rama sin afectar main
git add .
git commit -m "Desarrollar nueva funcionalidad"
# Fusionar cuando esté lista
git checkout main
git merge nueva-funcionalidad
  1. Clonar: Cada desarrollador obtiene una copia completa
  2. Trabajar: Hacer cambios en ramas separadas
  3. Sincronizar: Compartir cambios con el equipo
  4. Integrar: Fusionar cambios de manera controlada
  • Distribuido: Cada clon es un backup completo
  • Remoto: Repositorios en la nube (GitHub, GitLab, etc.)
  • Historial: Nunca pierdes versiones anteriores

Entender el flujo básico de Git es fundamental para trabajar eficientemente.

Working Directory Staging Area Repository
(Directorio de (Área de (Repositorio)
trabajo) preparación)
archivo.txt → git add → git commit
(modificado) (staged) (committed)
↑ ↓
└────────── git checkout ←───────────┘
  1. Modificar archivos en tu directorio de trabajo

    Terminal window
    # Editar archivos con tu editor favorito
    echo "Nuevo contenido" >> archivo.txt
  2. Revisar cambios antes de confirmarlos

    Terminal window
    # Ver qué archivos han cambiado
    git status
    # Ver diferencias específicas
    git diff archivo.txt
  3. Agregar al staging area los cambios que quieres confirmar

    Terminal window
    # Agregar archivo específico
    git add archivo.txt
    # Agregar todos los archivos modificados
    git add .
    # Agregar interactivamente
    git add -p
  4. Confirmar cambios con un mensaje descriptivo

    Terminal window
    # Commit con mensaje
    git commit -m "Agregar nueva funcionalidad de búsqueda"
    # Commit con editor para mensaje largo
    git commit
  5. Sincronizar con repositorio remoto (si trabajas en equipo)

    Terminal window
    # Descargar cambios del remoto
    git pull origin main
    # Subir tus cambios
    git push origin main
Comandos básicos
Comandos esenciales
# Configuración inicial (solo una vez)
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
# Inicializar repositorio
git init
# Clonar repositorio existente
git clone https://github.com/usuario/repo.git
# Ver estado actual
git status
# Agregar cambios
git add archivo.txt
git add .
# Confirmar cambios
git commit -m "Mensaje descriptivo"
# Ver historial
git log
git log --oneline
# Conectar con repositorio remoto
git remote add origin https://github.com/usuario/repo.git
# Subir cambios
git push origin main
# Descargar cambios
git pull origin main

Un directorio que contiene tu proyecto y todo su historial de versiones.

Una “fotografía” de tu proyecto en un momento específico. Cada commit tiene:

  • SHA: Identificador único (ej: abc1234)
  • Mensaje: Descripción de los cambios
  • Autor: Quién hizo los cambios
  • Fecha: Cuándo se hicieron los cambios

Una línea independiente de desarrollo. Te permite trabajar en funcionalidades sin afectar el código principal.

Una versión de tu repositorio alojada en internet (como GitHub).

  • Clone: Copia local de un repositorio
  • Fork: Copia de un repositorio en tu cuenta de GitHub
Flujo personal
# 1. Crear o clonar repositorio
git init mi-proyecto
cd mi-proyecto
# 2. Trabajar en el proyecto
echo "# Mi Proyecto" > README.md
git add README.md
git commit -m "Agregar README"
# 3. Conectar con GitHub
git remote add origin https://github.com/usuario/mi-proyecto.git
git push -u origin main
# 4. Continuar desarrollo
# ... hacer cambios ...
git add .
git commit -m "Agregar nueva funcionalidad"
git push
Flujo colaborativo
# 1. Clonar repositorio del equipo
git clone https://github.com/equipo/proyecto.git
cd proyecto
# 2. Crear rama para nueva funcionalidad
git checkout -b mi-funcionalidad
# 3. Desarrollar y confirmar cambios
# ... hacer cambios ...
git add .
git commit -m "Implementar mi funcionalidad"
# 4. Sincronizar con main
git checkout main
git pull origin main
git checkout mi-funcionalidad
git merge main
# 5. Subir rama y crear Pull Request
git push origin mi-funcionalidad
# Crear PR en GitHub
Buenas prácticas
  • Usa presente: “Agregar función” no “Agregué función”
  • Sé descriptivo: Explica qué y por qué, no cómo
  • Máximo 50 caracteres en la primera línea
  • Usa convenciones: feat:, fix:, docs:, etc.
Terminal window
# Buenos mensajes
git commit -m "feat: agregar sistema de autenticación"
git commit -m "fix: corregir error en cálculo de totales"
git commit -m "docs: actualizar guía de instalación"
# Mensajes a evitar
git commit -m "cambios"
git commit -m "fix"
git commit -m "trabajo del día"
mi-proyecto/
├── .gitignore # Archivos a ignorar
├── README.md # Documentación principal
├── LICENSE # Licencia del proyecto
├── src/ # Código fuente
├── docs/ # Documentación
├── tests/ # Pruebas
└── .github/ # Configuración de GitHub
└── workflows/ # GitHub Actions
.gitignore
# Dependencias
node_modules/
vendor/
# Archivos de configuración local
.env
config.local.js
# Archivos del sistema
.DS_Store
Thumbs.db
# IDEs
.vscode/
.idea/
*.swp
# Archivos compilados
*.class
*.o
dist/
build/

En este módulo has aprendido:

Conceptos fundamentales
  • Git: Sistema de control de versiones distribuido
  • GitHub: Plataforma para alojar repositorios Git
  • Ventajas: Historial, colaboración, backup, reversión
  • Flujo básico: Working → Staging → Repository
  • Comandos esenciales: init, add, commit, push, pull
  • Buenas prácticas: Mensajes claros, estructura organizada

En el próximo módulo profundizaremos en los fundamentos de Git, aprendiendo a crear repositorios, manejar el staging area y trabajar con el historial de commits.

🐝