Conceptos de Git, desde cero
Git es un programa que guarda el historial de cambios de una carpeta. Cada vez que le pedís, saca una “foto” de tus archivos y la guarda con un mensaje. Después podés ver qué cambió, volver atrás, trabajar en paralelo y compartir el proyecto con otras personas.
Términos de esta página
Volvé acá cuando una palabra no te suene. Todas se explican con más detalle abajo.
- Repositorio (repo)
- Una carpeta cuyo historial controla Git. Se distingue porque adentro tiene una carpeta oculta llamada
.git, donde Git guarda todo el historial. - Commit
- Una “foto” guardada del proyecto en un momento dado, con un mensaje que explica qué cambió, la fecha y quién lo hizo. Es la unidad básica del historial.
- Hash
- El identificador único de cada commit: un código como
3ddb522(versión corta de uno de 40 caracteres). Sirve para referirse a un commit puntual. - Carpeta de trabajo
- Los archivos tal como los ves y editás en tu editor (en inglés, working directory).
- Área de preparación
- Una “sala de espera” donde ponés los cambios que querés incluir en el próximo commit (en inglés, staging area o index). Se llena con
git add. - Rama (branch)
- Una línea de trabajo independiente. Permite probar algo sin tocar la versión principal. La rama principal suele llamarse
main. - HEAD
- Un marcador que indica “dónde estás parado”: normalmente apunta a la rama actual y, a través de ella, al último commit.
- Remoto (remote)
- Una copia del repositorio en otro lugar, normalmente en GitHub. Por convención, el remoto principal se llama
origin. - Clonar
- Descargar un repositorio remoto completo (archivos + historial) a tu computadora.
- Push / Pull
- Push: subir tus commits al remoto. Pull: traer los commits nuevos del remoto a tu copia.
- Merge
- Unir los cambios de una rama con otra.
- GitHub
- Un sitio web que guarda repositorios Git en internet y agrega herramientas para colaborar. Git es el programa; GitHub es un servicio que lo usa.
Qué problema resuelve Git
Sin Git, para no perder trabajo terminás con archivos como app-final.js, app-final-v2.js, app-final-AHORA-SI.js. No sabés qué cambió entre una y otra, y si dos personas editan a la vez, alguien pisa el trabajo del otro.
Con Git trabajás siempre sobre los mismos archivos, y cuando llegás a un punto que te interesa guardar hacés un commit. Git recuerda todos los commits, así que podés:
- Ver el historial: qué cambió, cuándo, quién y por qué (por el mensaje).
- Volver atrás: recuperar cómo estaba un archivo o todo el proyecto en cualquier commit.
- Trabajar en paralelo: con ramas, probar una idea sin romper la versión que funciona.
- Colaborar: varias personas trabajan en el mismo proyecto y Git une los cambios.
- Tener respaldo: si subís el repo a GitHub, tu trabajo queda también en internet.
Git trabaja en tu computadora: no necesita internet para hacer commits ni ver el historial. Internet solo hace falta para compartir (push/pull).
Las cuatro zonas: dónde está cada cambio
Un cambio pasa por varias “zonas” antes de quedar guardado y compartido. Entender esto explica casi todos los comandos:
- Carpeta de trabajo: editás un archivo. Git se da cuenta de que cambió, pero todavía no lo guardó.
- Área de preparación: con
git addelegís qué cambios van a entrar en el próximo commit. Sirve para guardar solo una parte de lo que modificaste. - Repositorio local: con
git commitlo preparado se guarda en el historial, dentro de la carpeta.gitde tu computadora. - Repositorio remoto: con
git pushtus commits se suben a GitHub. Congit pulltraés los de otras personas.
¿Por qué existe el área de preparación? Porque a veces modificás varios archivos y querés guardarlos en commits separados (por ejemplo, “arreglo del login” y “cambio de colores”). Con git add elegís qué va en cada uno.
Commits e historial
Cada commit guarda el estado completo del proyecto y apunta al commit anterior (su “padre”). Así se forma una cadena: el historial. Cada commit tiene un hash único, un mensaje, un autor y una fecha.
La rama main es simplemente un marcador que apunta al último commit de esa línea. HEAD te dice en qué rama estás. Cuando hacés un commit nuevo, la rama actual avanza sola hasta él.
Buenos commits: chicos y con un solo propósito. El mensaje dice qué hace y, si no es obvio, por qué: “Corrige el puerto de la app en el Dockerfile”.
Los commits son locales hasta que hacés git push. Podés hacer muchos commits sin internet y subirlos todos juntos después.
Los estados de un archivo
Cuando corrés git status, Git te dice en qué estado está cada archivo. Son cuatro:
- Sin seguimiento (untracked): un archivo nuevo que Git nunca guardó. Git lo ve, pero lo ignora hasta que hagas
git add. - Preparado (staged): agregado con
git add; va a entrar en el próximo commit. - Sin cambios (unmodified): igual que en el último commit. No aparece en
git status. - Modificado (modified): cambió desde el último commit, pero todavía no lo preparaste.
Ramas, en una idea
Una rama te deja trabajar en algo nuevo sin tocar la versión que funciona. Creás una rama (por ejemplo nueva-ruta), hacés commits ahí, y cuando está lista la unís (merge) a main. Si la idea no sirvió, borrás la rama y main nunca se enteró.
Técnicamente, una rama es solo un marcador que apunta a un commit: crearla es instantáneo y no copia archivos. Todo el detalle está en Ramas.
Git y GitHub no son lo mismo
Git
- Es un programa que instalás en tu computadora.
- Guarda el historial en la carpeta
.gitde cada proyecto. - Funciona sin internet y sin cuenta en ningún lado.
- Se usa desde la terminal (o desde editores como VS Code, que lo usan por detrás).
GitHub
- Es un sitio web (un servicio) que guarda repositorios Git en internet.
- Sirve de respaldo y para compartir: otras personas clonan tu repo o te proponen cambios.
- Agrega herramientas: pull requests (revisar cambios antes de unirlos), issues (tareas y errores), Actions (automatizaciones).
- Alternativas: GitLab, Bitbucket, Azure DevOps. Los comandos de Git son los mismos.
¿Listo para usarlo? Seguí Primeros pasos: instalar, configurar, primer commit y subirlo a GitHub, paso a paso.