Tutorial de Git para estudiantes Fundamentos, branches y submódulos
Escenario del Tutorial
Section titled “Escenario del Tutorial”Proyecto: Desarrollo de una aplicación web de gestión de tareas para el instituto
Repositorio del profesor: https://github.com/profesor-informatica/proyecto-tareas-clase
Objetivo: Los estudiantes colaborarán en el desarrollo, aprendiendo Git paso a paso.
Roles y Responsabilidades
Section titled “Roles y Responsabilidades”Tareas del Profesor
Section titled “Tareas del Profesor”- ✓ Crear y mantener el repositorio principal
- ✓ Configurar permisos y protecciones de ramas (branches)
- ✓ Revisar y aprobar Pull Requests
- ✓ Resolver conflictos complejos
- ✓ Gestionar releases y tags
- ✓ Supervisar el flujo de trabajo del equipo
Tareas del Alumno
Section titled “Tareas del Alumno”- Clonar el repositorio
- Crear branches para sus características
- Realizar commits con sus cambios
- Crear y enviar Pull Requests
- Resolver conflictos básicos
- Mantener su fork actualizado
Módulo 1: Fundamentos de Git
Section titled “Módulo 1: Fundamentos de Git”¿Qué es Git?
Section titled “¿Qué es Git?”Git es un sistema de control de versiones distribuido que permite:
- Rastrear cambios en archivos
- Colaborar con otros desarrolladores
- Mantener un historial completo del proyecto
- Trabajar en paralelo sin interferencias
Conceptos clave
Section titled “Conceptos clave”- Repositorio: Carpeta que contiene tu proyecto y su historial
- Commit: Instantánea de tu proyecto en un momento específico
- Branch: Línea independiente de desarrollo
- Merge: Combinar cambios de diferentes branches
- Remote: Repositorio en un servidor (como GitHub)
Módulo 2: Configuración inicial
Section titled “Módulo 2: Configuración inicial”Preparación del profesor
Section titled “Preparación del profesor”El profesor debe crear el repositorio base:
# Crear repositorio localmkdir proyecto-tareas-clasecd proyecto-tareas-clasegit init
# Configuración inicialgit config user.name "Profesor Informática"git config user.email "profesor@instituto.edu"
# Crear estructura inicial del proyectomkdir src css js
echo "# Proyecto Tareas Clase" > README.mdecho "<!DOCTYPE html><html><head><title>Tareas</title></head><body><h1>Gestión de Tareas</h1></body></html>" > index.html
# Primer commitgit add .git commit -m "Inicial: Estructura básica del proyecto"
# Conectar con GitHub y subirgit branch -M maingit remote add origin https://github.com/profesor-informatica/proyecto-tareas-clase.gitgit push -u origin mainConfiguración del alumno
Section titled “Configuración del alumno”Cada estudiante debe configurar Git en su máquina:
# Configuración global (hacer una sola vez)git config --global user.name "Tu Nombre"git config --global user.email "tu.email@estudiante.com"
# Verificar configuracióngit config --list
# Configurar editor (opcional)git config --global core.editor "code --wait"Módulo 3: Primeros pasos con el repositorio
Section titled “Módulo 3: Primeros pasos con el repositorio”Clonar el repositorio
Section titled “Clonar el repositorio”# Clonar el repositorio del profesorgit clone https://github.com/profesor-informatica/proyecto-tareas-clase.git
# Entrar al directoriocd proyecto-tareas-clase
# Ver el estado actualgit status
# Ver el historialgit log --onelineExplorando el repositorio
Section titled “Explorando el repositorio”# Ver archivos en el repositoriols -la
# Ver información del repositorio remotogit remote -v
# Ver todas las ramasgit branch -aMódulo 4: Comandos básicos de Git
Section titled “Módulo 4: Comandos básicos de Git”Ciclo básico: add, commit, push
Section titled “Ciclo básico: add, commit, push”# Ver estado de archivosgit status
# Agregar archivos específicos al staging areagit add archivo.html
# Agregar todos los archivos modificadosgit add .
# Ver diferenciasgit diff # Cambios no stagedgit diff --staged # Cambios staged
# Crear commitgit commit -m "Descripción clara de los cambios"
# Ver historialgit loggit log --oneline --graphEjercicio práctico 1: primera contribución
Section titled “Ejercicio práctico 1: primera contribución”# 1. Crear un archivo CSS básicoecho "body { font-family: Arial, sans-serif; }" > css/styles.css
# 2. Ver estadogit status
# 3. Agregar al staging areagit add css/styles.css
# 4. Crear commitgit commit -m "Agregar estilos básicos CSS"
# 5. Ver el historialgit log --onelineMódulo 5: Trabajando con branches
Section titled “Módulo 5: Trabajando con branches”Conceptos de branching
Section titled “Conceptos de branching”Los branches permiten trabajar en características diferentes sin afectar el código principal.
Crear y usar branches
Section titled “Crear y usar branches”# Ver branch actualgit branch
# Crear nueva branchgit branch feature/login-form
# Cambiar a la nueva branchgit checkout feature/login-form# O en una sola línea:git checkout -b feature/login-form
# Trabajar en la nueva branchecho "<form><input type='text' placeholder='Usuario'><input type='password' placeholder='Contraseña'><button>Login</button></form>" >> index.html
# Hacer commit en la branchgit add index.htmlgit commit -m "Agregar formulario de login básico"Cambiar entre branches
Section titled “Cambiar entre branches”# Volver a maingit checkout main
# Ver diferencias entre branchesgit diff main feature/login-form
# Ver archivos en main vs feature branchcat index.html # En maingit checkout feature/login-formcat index.html # En feature branchMódulo 6: Trabajo con repositorios remotos
Section titled “Módulo 6: Trabajo con repositorios remotos”Push de branches
Section titled “Push de branches”# Subir branch al repositorio remotogit push origin feature/login-form
# Si es la primera vezgit push -u origin feature/login-formConfiguración de protecciones
Section titled “Configuración de protecciones”El profesor debe configurar en GitHub:
- Settings → Branches
- Add rule para
main - Require pull request reviews
- Require status checks
Pull requests y code review
Section titled “Pull requests y code review”Crear Pull Request
Section titled “Crear Pull Request”- Ir a GitHub
- Comparar branches
- Crear Pull Request con descripción detallada
## Descripción
Agregado formulario de login básico
## Cambios realizados
- Creado formulario HTML con campos usuario/contraseña- Agregado botón de envío
## Pruebas
- [x] Formulario se muestra correctamente- [ ] Pendiente: validación JavaScriptRevisar Pull Request
Section titled “Revisar Pull Request”# Descargar la branch del alumno para revisargit fetch origingit checkout feature/login-form
# Probar los cambios# Revisar código# Aprobar o solicitar cambios en GitHubMódulo 7: Merge y actualización
Section titled “Módulo 7: Merge y actualización”Merge de PR aprobadas
Section titled “Merge de PR aprobadas”# Después de aprobar en GitHub, actualizar localgit checkout maingit pull origin main
# El merge se hace automáticamente en GitHub# O manualmente:git merge feature/login-formgit push origin mainMantener tu branch actualizada
Section titled “Mantener tu branch actualizada”# Actualizar main localgit checkout maingit pull origin main
# Actualizar tu branch featuregit checkout feature/login-formgit merge main
# O usar rebase (más avanzado)git rebase mainMódulo 8: Resolución de conflictos
Section titled “Módulo 8: Resolución de conflictos”Simulando un conflicto
Section titled “Simulando un conflicto”Profesor crea cambio en main
Section titled “Profesor crea cambio en main”git checkout mainecho "<h2>Bienvenido al Sistema de Tareas</h2>" >> index.htmlgit add index.htmlgit commit -m "Agregar mensaje de bienvenida"git push origin mainAlumno trabaja en paralelo
Section titled “Alumno trabaja en paralelo”git checkout feature/login-formecho "<h2>Sistema de Login</h2>" >> index.htmlgit add index.htmlgit commit -m "Agregar título para login"
# Al intentar merge con main actualizadogit checkout maingit pull origin maingit checkout feature/login-formgit merge main# ¡Conflicto!Resolver el conflicto
Section titled “Resolver el conflicto”# Git marca los conflictos en el archivocat index.html
# Editar manualmente el archivo# Remover las marcas de conflicto <<<< ==== >>>># Mantener ambos cambios o elegir uno
# Después de resolvergit add index.htmlgit commit -m "Resolver conflicto: combinar mensajes de bienvenida y login"Módulo 9: Comandos avanzados
Section titled “Módulo 9: Comandos avanzados”Git stash - guardar trabajo temporal
Section titled “Git stash - guardar trabajo temporal”# Guardar cambios sin commitgit stash
# Ver stashes guardadosgit stash list
# Recuperar el stashgit stash pop
# Crear stash con mensajegit stash save "WIP: trabajando en validación"Git reset - deshacer cambios
Section titled “Git reset - deshacer cambios”# Deshacer último commit (mantener cambios)git reset --soft HEAD~1
# Deshacer último commit (descartar cambios)git reset --hard HEAD~1
# Deshacer cambios en archivo específicogit checkout -- archivo.htmlGit cherry-pick
Section titled “Git cherry-pick”# Aplicar commit específico de otra branchgit cherry-pick <commit-hash>Git rebase interactivo
Section titled “Git rebase interactivo”# Reescribir historia de últimos 3 commitsgit rebase -i HEAD~3
# Opciones: pick, reword, edit, squash, dropMódulo 10: Flujos de trabajo
Section titled “Módulo 10: Flujos de trabajo”GitHub Flow (recomendado para principiantes)
Section titled “GitHub Flow (recomendado para principiantes)”# 1. Actualizar maingit checkout maingit pull origin main
# 2. Crear branch para featuregit checkout -b feature/nueva-funcionalidad
# 3. Desarrollar y hacer commitsgit add .git commit -m "Implementar nueva funcionalidad"
# 4. Push y crear PRgit push origin feature/nueva-funcionalidad
# 5. Code review y merge# 6. Borrar branch después del mergegit branch -d feature/nueva-funcionalidadGit Flow (para proyectos más complejos)
Section titled “Git Flow (para proyectos más complejos)”# Inicializar Git Flowgit flow init
# Crear featuregit flow feature start nueva-funcionalidad
# Finalizar featuregit flow feature finish nueva-funcionalidad
# Crear releasegit flow release start v1.0.0git flow release finish v1.0.0Módulo 11: Herramientas y alias útiles
Section titled “Módulo 11: Herramientas y alias útiles”Configurar alias
Section titled “Configurar alias”# Alias útilesgit config --global alias.st statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.unstage 'reset HEAD --'git config --global alias.last 'log -1 HEAD'git config --global alias.visual '!gitk'git config --global alias.lg "log --oneline --decorate --all --graph"Comandos de información
Section titled “Comandos de información”# Ver diferencias visualesgit log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
# Ver archivos modificadosgit diff --name-only
# Ver estadísticas de commitsgit shortlog -sn
# Ver quién modificó cada líneagit blame archivo.htmlMódulo 12: Ejercicios prácticos completos
Section titled “Módulo 12: Ejercicios prácticos completos”Ejercicio 1: Implementar sistema de usuarios
Section titled “Ejercicio 1: Implementar sistema de usuarios”# 1. Crear branchgit checkout maingit pull origin maingit checkout -b feature/user-system
# 2. Crear archivos necesariosmkdir jsecho "class User { constructor(name, email) { this.name = name; this.email = email; } }" > js/user.js
# 3. Modificar HTMLecho "<div id='user-info'></div>" >> index.html
# 4. Commits incrementalesgit add js/user.jsgit commit -m "Crear clase User básica"
git add index.htmlgit commit -m "Agregar contenedor para información de usuario"
# 5. Push y PRgit push origin feature/user-systemEjercicio 2: Manejo de conflictos complejos
Section titled “Ejercicio 2: Manejo de conflictos complejos”# Simular trabajo en paralelo con otros compañeros# Cada alumno trabaja en diferentes archivos del mismo componenteMódulo 13: Mejores prácticas
Section titled “Módulo 13: Mejores prácticas”Mensajes de commit
Section titled “Mensajes de commit”Buenos ejemplos:
git commit -m "Agregar validación de email en formulario registro"git commit -m "Corregir bug: botón login no funcionaba en IE11"git commit -m "Refactorizar: extraer lógica de validación a clase separada"Convención de commits:
# Formato: tipo(alcance): descripcióngit commit -m "feat(auth): agregar login con Google"git commit -m "fix(ui): corregir espaciado en botones"git commit -m "docs: actualizar README con instrucciones de instalación"Estructura de branches
Section titled “Estructura de branches”main|-- develop|-- feature/user-authentication|-- feature/task-management|-- bugfix/login-error`-- hotfix/security-patch.gitignore
Section titled “.gitignore”# Crear archivo .gitignorecat > .gitignore << EOF# Dependenciesnode_modules/vendor/
# IDE.vscode/.idea/*.swp
# OS.DS_StoreThumbs.db
# Logs*.loglogs/
# Environment.env.env.localEOF
git add .gitignoregit commit -m "Agregar archivo .gitignore"Módulo 14: Solución de problemas comunes
Section titled “Módulo 14: Solución de problemas comunes”Problema 1: “Your branch is ahead/behind”
Section titled “Problema 1: “Your branch is ahead/behind””# Solución: Sincronizar con remotogit fetch origingit statusgit pull origin mainProblema 2: Commit accidental
Section titled “Problema 2: Commit accidental”# Deshacer último commit sin perder cambiosgit reset --soft HEAD~1
# Deshacer y descartar cambiosgit reset --hard HEAD~1Problema 3: Cambié archivo incorrecto
Section titled “Problema 3: Cambié archivo incorrecto”# Descartar cambios en archivo específicogit checkout -- archivo.html
# Si ya está en staginggit reset HEAD archivo.htmlgit checkout -- archivo.htmlProblema 4: Push rechazado
Section titled “Problema 4: Push rechazado”# Error: Updates were rejectedgit pull origin main# Resolver conflictos si los haygit push origin mainMódulo 15: Lista de verificación
Section titled “Módulo 15: Lista de verificación”Checklist diario del alumno
Section titled “Checklist diario del alumno”Antes de empezar a trabajar:
-
git status- verificar estado -
git pull origin main- actualizar main -
git checkout mi-branch- cambiar a mi branch -
git merge main- actualizar mi branch con main
Antes de hacer push:
-
git status- verificar cambios -
git diff- revisar diferencias - Commit con mensaje descriptivo
-
git push origin mi-branch
Checklist del profesor
Section titled “Checklist del profesor”Configuración inicial:
- Repositorio creado en GitHub
- Branch protection configurada en main
- Colaboradores agregados
- Issues/Project board configurado
Revisión de PRs:
- Código funciona correctamente
- Estilo de código consistente
- Commits bien estructurados
- Tests pasan (si aplica)
- Documentación actualizada
Módulo 16: Evaluación y proyecto final
Section titled “Módulo 16: Evaluación y proyecto final”Sistema de evaluación
Section titled “Sistema de evaluación”Criterios de evaluación:
- Uso correcto de comandos Git (30%)
- Calidad de commits y mensajes (20%)
- Manejo de branches y merges (25%)
- Resolución de conflictos (15%)
- Colaboración y code review (10%)
Proyecto final
Section titled “Proyecto final”Objetivo: Cada equipo de 3-4 estudiantes desarrollará una característica completa del sistema de tareas.
Equipos sugeridos:
- Equipo Frontend: Interfaz de usuario
- Equipo Backend: API y base de datos
- Equipo Testing: Pruebas automatizadas
- Equipo DevOps: Deployment y CI/CD
Flujo de trabajo:
# 1. Cada equipo crea su branch principalgit checkout -b team/frontend-ui
# 2. Miembros del equipo crean sub-branchesgit checkout -b feature/responsive-design
# 3. Trabajo colaborativo con PRs internasgit checkout -b fix/mobile-navigation
# 4. Integración con main a través de PR del equipoRecursos adicionales
Section titled “Recursos adicionales”Comandos de referencia rápida
Section titled “Comandos de referencia rápida”# Configuracióngit config --global user.name "Tu Nombre"git config --global user.email "email@ejemplo.com"
# Repositoriogit init # Inicializar repogit clone <url> # Clonar repogit status # Estado actualgit log # Historial
# Staging y commitsgit add <archivo> # Agregar a staginggit add . # Agregar todosgit commit -m "mensaje" # Crear commitgit commit -am "mensaje" # Add + commit
# Branchesgit branch # Listar branchesgit branch <nombre> # Crear branchgit checkout <nombre> # Cambiar branchgit checkout -b <nombre> # Crear y cambiargit merge <branch> # Merge branchgit branch -d <nombre> # Borrar branch
# Remotogit remote -v # Ver remotosgit fetch # Descargar cambiosgit pull # Fetch + mergegit push # Subir cambiosgit push -u origin <branch> # Primera vez
# Deshacergit reset --soft HEAD~1 # Deshacer commitgit reset --hard HEAD~1 # Deshacer + descartargit checkout -- <archivo> # Descartar cambiosgit stash # Guardar temporalgit stash pop # Recuperar temporalEnlaces útiles
Section titled “Enlaces útiles”- Git Documentation: https://git-scm.com/doc
- GitHub Guides: https://guides.github.com/
- Interactive Git Tutorial: https://learngitbranching.js.org/
- Git Cheat Sheet: https://training.github.com/downloads/github-git-cheat-sheet/
- Conventional Commits: https://www.conventionalcommits.org/
Herramientas recomendadas
Section titled “Herramientas recomendadas”- VS Code: Editor con excelente integración Git
- GitKraken: Cliente visual Git
- GitHub Desktop: Cliente oficial GitHub
- SourceTree: Cliente visual gratuito
- Git Extensions: Para Windows
Notas finales
Section titled “Notas finales”Este tutorial está diseñado para ser progresivo. No intentes aprender todo de una vez. La práctica constante es clave para dominar Git.
Recomendaciones:
- Practica cada comando varias veces
- No tengas miedo de experimentar
- Lee los mensajes de error cuidadosamente
- Usa
git help <comando>cuando tengas dudas - Haz commits frecuentes con mensajes descriptivos
Recordatorio importante: Git es una herramienta poderosa pero compleja. Es normal cometer errores al principio. La mayoría de errores se pueden deshacer, así que experimenta con confianza.
Tutorial creado para el curso de Informática - Actualizado Octubre 2025
Submódulos
Section titled “Submódulos”Añadir submódulo a nuestro proyecto
Section titled “Añadir submódulo a nuestro proyecto”Cómo incluir un repositorio dentro del nuestro. Al crear un submódulo se “copian” los archivos dentro de nuestro proyecto y se crean unos archivos para indicar que esos archivos están asociados a otro repositorio:
-
Añadimos el nuevo submódulo:
git submodule add https://github.com/twbs/bootstrap vendor/bootstrapUtilizamos la carpeta vendor para incluir código que no es nuestro. -
Se han creado:
ls vendor/bootstrap
git status new file: .gitmodules # archivo que asocia la ruta con la URL de github new file: vendor/bootstrap # Trata a esta carpeta como un fichero
git add .
git commit -m "Nuevo submódulo"¿Cómo actualizar si el submódulo tiene alguna actualización?
Section titled “¿Cómo actualizar si el submódulo tiene alguna actualización?”Opción 1: entrar en la carpeta del submódulo (por ejemplo vendor/bootstrap) y hacer:
git pullOpción 2: si tenemos muchos submódulos:
git submodule update --remote --recursiveOpción 3: la más sencilla, pull + fetch + actualización de submódulos, lo deja todo al día:
git pull --recurse-submodulesInicializar repositorio que tenga un submódulo
Section titled “Inicializar repositorio que tenga un submódulo”- Clonar el repositorio principal
- Se crean las carpetas (dentro de vendor) pero están vacías
- Inicializar los submódulos:
git submodule initgit submodule update