Fundamentos

Del caos de carpetas "final_v2" a la inmutabilidad de Git

Guardar copias manuales con nombres arbitrarios causa pérdida de código, sobreescrituras accidentales y cero trazabilidad. Git modela el proyecto como una secuencia dirigida de snapshots completos identificados criptográficamente.

Compara el enfoque tradicional de copias con el Grafo Dirigido de Git.
Gestión manual arcaica (Guardar como...)
📁
proyecto_final/ Versión original de ayer
📁
proyecto_final_FINAL/ ¿Qué cambios tiene? Nadie sabe
📁
proyecto_final_FINAL_v2_este_si/ Sobreescribió el trabajo del compañero

⚠️ Cero trazabilidad, sin autores, sin hashes, imposible comparar diferencias con precisión.

Ciclo de vida

El ciclo de tres estados: Working Tree, Staging e Historial

Un archivo no pasa directo de tu editor al historial. Primero reside modificado en tu disco (Working Tree), luego se prepara quirúrgicamente con git add (Staging Area), y finalmente se sella con git commit.

1. Working Tree Archivos en disco
index.html Limpio

Sin cambios pendientes.

2. Staging Area (Index) Preparación del snapshot
Staging vacío (usa git add)
3. Repositorio (.git) Historial inmutable
Commit a0f12c HEAD › main

Historial actual sincronizado.

$ El repositorio está limpio. Haz clic en "1. Modificar index.html" para iniciar el ciclo.
Estructura interna

Anatomía de un commit: objeto criptográfico de 4 partes

Un commit no almacena simples "líneas agregadas o borradas". Es un objeto íntegro que contiene un puntero a un árbol de archivos (Tree), la referencia al commit padre, datos de autoría y el mensaje explicativo.

Seleccionar Commit
Object Type: commit
SHA-1 Hash: 4b71e09c12a78f3d4b6890123456789abcdef10
Tree (Snapshot): tree 87e1a3b (src/, index.html, styles.css)
Parent: parent 1c028ea (initial commit)
Author & Committer: Facundo Uferer <dev@facundouferer.com>
Commit Message:

feat: add header navigation and semantic landmarks

Punteros y referencias

HEAD: la brújula que indica dónde estás parado

En Git, las ramas no son carpetas pesadas: son punteros móviles de texto plano. HEAD es una referencia especial que apunta a la rama activa, garantizando que el próximo commit se enganche en el lugar exacto.

Observa cómo HEAD se mueve con cada commit o al cambiar de rama.
HEAD ↓ refs/heads/main
main
C1
C2

HEAD apunta a main en el commit C2. Cada nuevo commit hará avanzar el puntero main automáticamente.

Inspección técnica

Diagnóstico y lectura de estado con git status y git log

Interpretar correctamente la salida de git status previene desastres. Aprende a distinguir archivos sin seguimiento (Untracked), cambios preparados (Staged) y ramas adelantadas respecto al remoto.

bash — git-course (zsh)
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   src/components/Navbar.astro

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
	modified:   src/pages/index.astro

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	temp-notes.txt
Verde (Staged)

Archivos añadidos con git add. Entrarán en el próximo snapshot.

Rojo (Not staged)

Archivos modificados en disco pero aún no indexados en el Staging Area.

Untracked

Archivos nuevos que Git nunca ha versionado en este proyecto.

Reglas profesionales

Checklist de oro para no ensuciar tu repositorio

Dominar Git no es memorizar comandos, sino aplicar disciplina en cada paso. Revisa estas 4 directrices arquitectónicas indispensables antes de tu próximo commit.

01

Configura tu identidad antes del primer commit

Git estampa user.name y user.email de forma inmutable en cada hash SHA-1. Si cometeas con correos genéricos o incorrectos, corregirlo después requerirá reescribir la historia.

git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
02

Staging quirúrgico: evita el "git add ."

Usa el Staging Area como un banco de carpintero: coloca solo los archivos que forman parte del mismo cambio lógico. Considera usar git add -p para revisar fragmentos individuales.

git add src/components/Header.astro
git status
03

Commits atómicos y testeables

Cada commit debe compilar, pasar pruebas y resolver un único objetivo. Si necesitas usar la palabra "y" para describir el commit (ej. "agrego login y cambio estilos del footer"), divídelo en dos.

04

Crea ramas para todo cambio no trivial

Nunca programes directamente sobre main. Aislar tu trabajo en una rama feature te da total libertad para probar, descartar o pausar sin bloquear a otros desarrolladores.

git switch -c feature/auth-login