Introducción a Git y GitHub
Módulo 1: Introducción a Git y GitHub
Section titled “Módulo 1: 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.
¿Qué es Git?
Section titled “¿Qué es Git?”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.
Características principales de Git
Section titled “Características principales de Git”- 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
¿Por qué usar Git?
Section titled “¿Por qué usar Git?”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.htmlProblemas:
- Archivos duplicados innecesarios
- Confusión sobre cuál es la versión actual
- Pérdida de historial de cambios
- Dificultad para colaborar
mi-proyecto/├── .git/ # Historial completo├── index.html # Versión actual├── styles.css└── script.js
# Historial de commitscommit abc123: "Agregar funcionalidad de login"commit def456: "Corregir bug en navegación"commit ghi789: "Diseño inicial"Ventajas:
- Un solo archivo por cada componente
- Historial completo de cambios
- Posibilidad de volver a versiones anteriores
- Colaboración eficiente
¿Qué es GitHub?
Section titled “¿Qué es GitHub?”GitHub es una plataforma de desarrollo colaborativo que utiliza Git para el control de versiones. Es como una red social para desarrolladores donde puedes:
Funcionalidades principales
Section titled “Funcionalidades principales”- 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
GitHub vs otras plataformas
Section titled “GitHub vs otras plataformas”| Característica | GitHub | GitLab | Bitbucket |
|---|---|---|---|
| Popularidad | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Repositorios privados gratuitos | ✅ | ✅ | ✅ |
| CI/CD integrado | GitHub Actions | GitLab CI | Pipelines |
| Comunidad | Muy grande | Grande | Mediana |
| Integración con Atlassian | ❌ | ❌ | ✅ |
Ventajas del control de versiones
Section titled “Ventajas del control de versiones”El control de versiones no es solo para programadores. Cualquier proyecto que involucre archivos que cambian con el tiempo puede beneficiarse.
1. Historial completo de cambios
Section titled “1. Historial completo de cambios”# Ver historial de cambiosgit log --oneline
# Salida ejemplo:abc1234 Agregar función de búsquedadef5678 Corregir bug en loginghi9012 Actualizar documentaciónjkl3456 Versión inicial2. Capacidad de revertir cambios
Section titled “2. Capacidad de revertir cambios”# Volver a una versión anteriorgit checkout abc1234
# Revertir un commit específicogit revert def5678
# Deshacer cambios no confirmadosgit checkout -- archivo.txt3. Trabajo en paralelo con ramas
Section titled “3. Trabajo en paralelo con ramas”# Crear nueva rama para una funcionalidadgit branch nueva-funcionalidadgit checkout nueva-funcionalidad
# O en un solo comandogit checkout -b nueva-funcionalidad
# Trabajar en la rama sin afectar maingit add .git commit -m "Desarrollar nueva funcionalidad"
# Fusionar cuando esté listagit checkout maingit merge nueva-funcionalidad4. Colaboración eficiente
Section titled “4. Colaboración eficiente”- Clonar: Cada desarrollador obtiene una copia completa
- Trabajar: Hacer cambios en ramas separadas
- Sincronizar: Compartir cambios con el equipo
- Integrar: Fusionar cambios de manera controlada
5. Backup automático
Section titled “5. Backup automático”- Distribuido: Cada clon es un backup completo
- Remoto: Repositorios en la nube (GitHub, GitLab, etc.)
- Historial: Nunca pierdes versiones anteriores
Flujo de trabajo general en Git
Section titled “Flujo de trabajo general en Git”Entender el flujo básico de Git es fundamental para trabajar eficientemente.
Estados de los archivos en Git
Section titled “Estados de los archivos en Git”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. Working Directory (Directorio de trabajo)
- Archivos en tu sistema de archivos
- Pueden estar modificados, nuevos o eliminados
- Estado: “modified” o “untracked”
2. Staging Area (Área de preparación)
- Archivos preparados para el próximo commit
- Snapshot de cómo se verán en el commit
- Estado: “staged”
3. Repository (Repositorio)
- Archivos confirmados en el historial
- Versión permanente en la base de datos de Git
- Estado: “committed”
Flujo de trabajo típico
Section titled “Flujo de trabajo típico”Modificar archivos en tu directorio de trabajo
Terminal window # Editar archivos con tu editor favoritoecho "Nuevo contenido" >> archivo.txtRevisar cambios antes de confirmarlos
Terminal window # Ver qué archivos han cambiadogit status# Ver diferencias específicasgit diff archivo.txtAgregar al staging area los cambios que quieres confirmar
Terminal window # Agregar archivo específicogit add archivo.txt# Agregar todos los archivos modificadosgit add .# Agregar interactivamentegit add -pConfirmar cambios con un mensaje descriptivo
Terminal window # Commit con mensajegit commit -m "Agregar nueva funcionalidad de búsqueda"# Commit con editor para mensaje largogit commitSincronizar con repositorio remoto (si trabajas en equipo)
Terminal window # Descargar cambios del remotogit pull origin main# Subir tus cambiosgit push origin main
Comandos esenciales para empezar
Section titled “Comandos esenciales para empezar”# Configuración inicial (solo una vez)git config --global user.name "Tu Nombre"git config --global user.email "tu@email.com"
# Inicializar repositoriogit init
# Clonar repositorio existentegit clone https://github.com/usuario/repo.git
# Ver estado actualgit status
# Agregar cambiosgit add archivo.txtgit add .
# Confirmar cambiosgit commit -m "Mensaje descriptivo"
# Ver historialgit loggit log --oneline
# Conectar con repositorio remotogit remote add origin https://github.com/usuario/repo.git
# Subir cambiosgit push origin main
# Descargar cambiosgit pull origin mainConceptos clave que debes recordar
Section titled “Conceptos clave que debes recordar”Repository (Repositorio)
Section titled “Repository (Repositorio)”Un directorio que contiene tu proyecto y todo su historial de versiones.
Commit
Section titled “Commit”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
Branch (Rama)
Section titled “Branch (Rama)”Una línea independiente de desarrollo. Te permite trabajar en funcionalidades sin afectar el código principal.
Remote (Remoto)
Section titled “Remote (Remoto)”Una versión de tu repositorio alojada en internet (como GitHub).
Clone vs Fork
Section titled “Clone vs Fork”- Clone: Copia local de un repositorio
- Fork: Copia de un repositorio en tu cuenta de GitHub
Flujos de trabajo comunes
Section titled “Flujos de trabajo comunes”Flujo personal (un desarrollador)
Section titled “Flujo personal (un desarrollador)”# 1. Crear o clonar repositoriogit init mi-proyectocd mi-proyecto
# 2. Trabajar en el proyectoecho "# Mi Proyecto" > README.mdgit add README.mdgit commit -m "Agregar README"
# 3. Conectar con GitHubgit remote add origin https://github.com/usuario/mi-proyecto.gitgit push -u origin main
# 4. Continuar desarrollo# ... hacer cambios ...git add .git commit -m "Agregar nueva funcionalidad"git pushFlujo colaborativo (equipo)
Section titled “Flujo colaborativo (equipo)”# 1. Clonar repositorio del equipogit clone https://github.com/equipo/proyecto.gitcd proyecto
# 2. Crear rama para nueva funcionalidadgit checkout -b mi-funcionalidad
# 3. Desarrollar y confirmar cambios# ... hacer cambios ...git add .git commit -m "Implementar mi funcionalidad"
# 4. Sincronizar con maingit checkout maingit pull origin maingit checkout mi-funcionalidadgit merge main
# 5. Subir rama y crear Pull Requestgit push origin mi-funcionalidad# Crear PR en GitHubMejores prácticas desde el inicio
Section titled “Mejores prácticas desde el inicio”Mensajes de commit
Section titled “Mensajes de commit”- 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.
# Buenos mensajesgit 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 evitargit commit -m "cambios"git commit -m "fix"git commit -m "trabajo del día"Estructura de repositorio
Section titled “Estructura de repositorio”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 ActionsArchivos .gitignore
Section titled “Archivos .gitignore”# Dependenciasnode_modules/vendor/
# Archivos de configuración local.envconfig.local.js
# Archivos del sistema.DS_StoreThumbs.db
# IDEs.vscode/.idea/*.swp
# Archivos compilados*.class*.odist/build/Resumen
Section titled “Resumen”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.