Git para no perder nunca tu trabajo
Con Git, ningún experimento se pierde y cualquier error tiene vuelta atrás.
Qué vas a aprender
- Configurar tu identidad en git y dominar el flujo diario:
add,commitypush - Crear y fusionar ramas para experimentar sin romper
main - Escribir un
.gitignoreque excluya checkpoints de modelos y archivos binarios grandes - Recorrer el historial con
git logpara entender cómo ha evolucionado un proyecto
Por qué importa
Vas a escribir cientos de archivos de código a lo largo de 34 módulos. Sin control de versiones perderás trabajo, romperás cosas que no podrás deshacer y no tendrás forma de colaborar con nadie.
Git es la herramienta. GitHub es donde vive el código. Esta lección cubre lo que necesitas para el curso, y nada más.
La idea clave
sequenceDiagram
participant WD as Directorio de trabajo
participant SA as Área de preparación
participant LR as Repositorio local
participant R as Remoto (GitHub)
WD->>SA: git add
SA->>LR: git commit
LR->>R: git push
R->>LR: git fetch
LR->>WD: git pull
Tus archivos pasan por tres sitios antes de llegar a GitHub:
- Directorio de trabajo: los archivos tal y como los ves en tu editor.
- Área de preparación (staging area): lo que has marcado con
git addpara el próximo commit. - Repositorio local: el historial de commits guardado en la carpeta
.git.
Tres cosas que debes recordar:
1. Guarda a menudo (git commit)
2. Sube al remoto (git push)
3. Crea una rama para cada experimento (git checkout -b experimento)
Paso a paso
Paso 1: configura git
git config --global user.name "Tu Nombre"
git config --global user.email "tu@ejemplo.com"
Usa el mismo email que en tu cuenta de GitHub: así tus commits aparecerán vinculados a tu perfil (y contarán en tu historial de actividad, algo que miran los reclutadores).
Paso 2: el flujo diario
git status
git add file.py
git commit -m "Añade la implementación del perceptrón"
git push origin main
Buenos mensajes de commit. Escríbelos en imperativo y explica qué cambia: «Añade validación del dataset», no «cambios» ni «arreglos varios». Dentro de seis meses, tú serás quien los lea.
Paso 3: ramas para experimentar
git checkout -b experiment/new-optimizer
# ... haz cambios, haz commits ...
git checkout main
git merge experiment/new-optimizer
En IA se experimenta mucho: un optimizador distinto, otro tamaño de lote, una arquitectura nueva. Cada experimento en su rama significa que main siempre funciona.
Paso 4: tu repositorio del curso
Guarda todo lo que hagas en el curso (scripts, notebooks, proyectos) en un repositorio propio. Así tendrás copia de seguridad, historial de cambios y, al final, un portfolio que enseñar.
- En GitHub, pulsa New repository, llámalo por ejemplo
mi-curso-iay créalo vacío (sin README). - En tu ordenador:
mkdir mi-curso-ia && cd mi-curso-ia
git init -b main
echo "# Mi curso de ingeniería de IA" > README.md
git add README.md
git commit -m "Primer commit"
git remote add origin https://github.com/TU-USUARIO/mi-curso-ia.git
git push -u origin main
git checkout -b experimentos
# prueba cosas aquí sin miedo a romper main
git push origin experimentos
A partir de ahora, cada vez que descargues un archivo de una lección o escribas tu propio código, guárdalo en esta carpeta y haz commit.
Extra: deshacer los errores más comunes
Todo el mundo se equivoca con git. Estos son los rescates que más vas a usar:
| Situación | Comando |
|---|---|
| Quiero descartar los cambios de un archivo que aún no he añadido | git restore archivo.py |
He hecho git add de algo que no quería |
git restore --staged archivo.py |
| Me he equivocado en el mensaje del último commit (y no lo he subido) | git commit --amend -m "Mensaje correcto" |
| Quiero deshacer un commit que ya está en GitHub | git revert <hash> (crea un commit que lo anula) |
| ¿Qué ha cambiado exactamente? | git diff (sin preparar) y git diff --staged (preparado) |
Regla de oro: nunca reescribas (
--amend,rebase,push --force) commits que ya has compartido con otras personas. Para eso estágit revert.
En la práctica
Para este curso necesitas exactamente estos comandos:
| Comando | Cuándo |
|---|---|
git clone |
Descargar un proyecto (tuyo o de otra persona) |
git add + git commit |
Guardar tu trabajo |
git push |
Hacer copia de seguridad en GitHub |
git checkout -b |
Probar algo sin romper main |
git log --oneline |
Ver lo que has hecho |
Y ya está. Para este curso no necesitas rebase, cherry-pick ni submódulos.
Un .gitignore para proyectos de IA
Los checkpoints de modelos pesan gigas: no los subas nunca a git. Empieza con esto:
# Entornos y secretos
.venv/
.env
# Checkpoints y pesos de modelos
*.pt
*.pth
*.safetensors
*.ckpt
# Datos y resultados
data/
outputs/
wandb/
# Python
__pycache__/
.ipynb_checkpoints/
Retos para tu ordenador
- Crea tu repositorio
mi-curso-ia, haz una rama llamadami-progreso, añade un archivo, haz commit y súbelo a GitHub - Crea un
.gitignoreque excluya los checkpoints de modelos (.pt,.pth,.safetensors) - Haz tres commits más y revisa el historial con
git log --oneline; después deshaz el último congit revert
Glosario de la lección
| Término | Como se suele decir | Qué es exactamente |
|---|---|---|
| Commit | «Guardar» | Una instantánea de todo tu proyecto en un momento concreto |
| Branch (rama) | «Una copia» | Un puntero a un commit que avanza a medida que trabajas |
| Merge (fusión) | «Juntar código» | Tomar los cambios de una rama y aplicarlos sobre otra |
| Remote (remoto) | «La nube» | Una copia de tu repositorio alojada en otro sitio (GitHub, GitLab) |
| Fork | «Copiar un repo» | Tu copia personal de un repositorio ajeno, en tu cuenta de GitHub |