Fundamentos de prácticos de Git y GitHub

in #gitlast month

_uno.png

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

  1. Crea un archivo hola.md con contenido:
# Hola
Esta es mi primera práctica con Git.
  1. 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.

  1. 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.

  1. Crear y cambiar a rama:
git branch nueva-funcion
git checkout nueva-funcion
# o: git checkout -b nueva-funcion

  1. Crear funcionalidad.txt con dos líneas de texto.
  2. 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.

  1. 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.
  1. Revisar, aprobar y Merge desde la interfaz de GitHub
  2. 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.

  1. En GitHub (interfaz web): edita hola.md y añade una línea diferente (commit directo al main).
  2. 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.

  1. 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

  1. Crear .gitignore y añadir cosas típicas:
node_modules/
*.log
.DS_Store
.env
  1. 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.