Fundamentos de prácticos de Git y GitHub
Objetivo general: que el alumno sea capaz de crear un repositorio en GitHub, clonar localmente, hacer commits y ramas, subir cambios (push), abrir un Pull Request y resolver conflictos sencillos.
Requisitos previos
- Cuenta en GitHub.
- Git instalado en la máquina (o usar GitHub Desktop / VS Code integrado).
- Editor de texto o IDE (VS Code recomendado).
- Conexión a Internet.
Actividad 0 - Preparación
- Abre terminal / Git Bash (Windows) o Terminal (macOS/Linux).
- Configura tu identidad (si no lo has hecho):
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
Comprobación: git config --list debe mostrar tu nombre y correo.
Actividad 1 — Crear repositorio en GitHub
- En GitHub: Nuevo → Repository.
- Nombre: practica-git
- Descripción: Repositorio de práctica
- Inicializa con README (opcional).
- Copia la URL HTTPS del repo (ej. https://github.com/tuusuario/practica-git.git).
Comprobación: Verás el repo en tu cuenta.
Actividad 2 — Clonar el repositorio
- En la terminal:
git clone https://github.com/tuusuario/practica-git.git
cd practica-git
Comprobación: ls o dir muestra los archivos; git status muestra “On branch main” y “nothing to commit”.
Actividad 3 — Crear un archivo y hacer el primer commit
- Crea un archivo hola.md con contenido:
# Hola
Esta es mi primera práctica con Git.
- Comandos
git status
git add hola.md
git status
git commit -m "agrega hola.md: primera práctica"
git log --oneline
Comprobación: git log --oneline muestra el commit; git status muestra limpio.
- Subir cambios
git push origin main
Comprobación en GitHub: el archivo hola.md aparece en el repo remoto.
Actividad 4 — Trabajar con ramas
Objetivo: aprender a crear una rama para una nueva función y luego fusionarla.
- Crear y cambiar a rama:
git branch nueva-funcion
git checkout nueva-funcion
# o: git checkout -b nueva-funcion
- Crear funcionalidad.txt con dos líneas de texto.
- Añadir y commitear:
git add funcionalidad.txt
git commit -m "añade funcionalidad base en nueva-funcion"
git push origin nueva-funcion
Comprobación: En GitHub aparece la rama nueva-funcion con tu commit.
- Abrir Pull Request:
- En GitHub, al detectar la rama, crea un Pull Request hacia main.
- Escribe título y breve descripción, y crea PR.
- Revisar, aprobar y Merge desde la interfaz de GitHub
- En local, vuelve a main y trae cambios:
git checkout main
git pull origin main
Comprobación: funcionalidad.txt está en main local.
Actividad 5 — Simular colaboración y resolver conflicto simple
Objetivo: ver un conflicto y resolverlo.
- En GitHub (interfaz web): edita hola.md y añade una línea diferente (commit directo al main).
- En local, crea una rama conflicto y modifica la misma línea de hola.md con contenido distinto:
git checkout -b conflicto
# editar hola.md localmente cambiando la MISMA zona que cambiaste en GitHub
git add hola.md
git commit -m "modifica hola.md en rama conflicto"
git push origin conflicto
3.En GitHub, intenta abrir PR desde conflicto → main. GitHub detectará conflicto.
- Resolver conflicto:
- Resolver en la web (GitHub permite editar y resolver en la interfaz).
- Resolver localmente:
git checkout main
git pull origin main # trae el cambio hecho en web
git merge conflicto # intentará fusionar y mostrará conflicto
# abrir hola.md, ver marcas <<<<<<< HEAD ======= >>>>>>> conflict-branch
# editar para dejar el contenido correcto (eliminar marcas)
git add hola.md
git commit -m "resuelve conflicto de hola.md"
git push origin main
Comprobación: PR muestra merge ok; git status limpio; GitHub muestra el contenido final.
Actividad 6 — Buenas prácticas: .gitignore y ramas por feature
- Crear .gitignore y añadir cosas típicas:
node_modules/
*.log
.DS_Store
.env
- Commit y push:
git add .gitignore
git commit -m "agrega .gitignore"
git push origin main
Comprobación: Archivos ignorados no aparecen en git status ni en GitHub
Actividad 7 — Limpiar historial (opcional, DEMO)
Mostrar revert y reset (advertir riesgo):
``bash
git log --oneline
git revert <commit_sha> # crea un nuevo commit que revierte
o (peligroso): git reset --hard <commit_sha> # rehace HEAD localmente
**Nota**: *reset --hard* puede borrar trabajo no subido. Usarlo con precaución.
# Ejercicios propuestos (práctica adicional)
- Crear una rama por cada tarea (feature/bugfix/docs) y hacer 3 PRs diferentes.
- Crear un issue describiendo un bug ficticio y enlazar el PR que lo soluciona.
- Habilitar GitHub Pages para publicar una página simple index.html.
- Integrar un workflow simple con GitHub Actions que ejecute echo "test" (básico demo).
# Lista de comandos “cheat sheet”
```bash
git clone URL
git status
git add <archivo> # o git add .
git commit -m "msg"
git push origin rama
git pull origin main
git checkout -b rama-nueva
git branch
git merge rama
git log --oneline
git revert <sha>
git reset --hard <sha> # peligroso
git remote -v
Errores comunes y cómo solucionarlos
- error: failed to push some refs → Ejecuta git pull --rebase origin main o git pull primero, resuelve conflictos y push de nuevo.
- Conflict markers → editar, elegir correcto, git add, git commit.
- Olvidar git add → git commit no incluirá cambios; usa git add y luego git commit --amend si quieres cambiar el último commit.
- Subir archivos grandes → usar Git LFS o evitar subir binarios.
