Más allá de "puntos de guardado para código".
Cada base de código tiene un momento donde alguien elimina el archivo equivocado, rompe una funcionalidad que funcionaba, o envía un cambio que no debería haber salido. Sin control de versiones, la recuperación significa esperar que alguien tenga una copia reciente en su laptop. Con Git, la recuperación es un comando.
git log te muestra cada estado en el que tu base de código ha estado — quién cambió qué, cuándo y por qué. git diff te permite comparar cualquier dos puntos en el historial para ver exactamente qué cambió. git checkout (o git restore) te permite recuperar un archivo — o un directorio completo — de cualquier commit anterior. Estas no son herramientas de emergencia que aprendes cuando las cosas se rompen. Son herramientas diarias que te hacen más rápido: comparar el enfoque de ayer con el de hoy, confirmar qué cambió entre dos despliegues, recuperar una función que eliminaste la semana pasada.
Los equipos que tratan Git como "solo guarda mi código" están dejando las funcionalidades más poderosas sin usar. El viaje en el tiempo no es una metáfora — es una capacidad literal. Cada commit es una instantánea que puedes revisitar, comparar o restaurar. El único requisito es que confirmes con suficiente frecuencia para tener instantáneas útiles.
Dos ingenieros editando el mismo archivo al mismo tiempo es el problema más antiguo en el trabajo colaborativo de software. Antes del control de versiones, los equipos usaban bloqueos de archivos ("Estoy editando config.ts, no lo toques"), ventanas de edición programadas, o simplemente esperaban lo mejor. Los tres enfoques colapsan a escala.
Git resuelve esto con ramas. Una rama es una copia aislada de la base de código donde puedes hacer cambios sin afectar el trabajo de nadie más. Escribes tu funcionalidad, tu compañero escribe la suya, y ninguno de ustedes ve el código a medio terminar del otro hasta que ambos estén listos. El merge es el punto de integración — el momento deliberado donde dos flujos de trabajo se combinan y cualquier conflicto surge.
Esto no es solo sobre prevenir archivos pisados. Las ramas te dan permiso para experimentar. Puedes intentar una refactorización arriesgada, decidir que está mal y eliminar la rama — sin daño, sin necesidad de revertir, sin ruido de commits en el historial compartido. El costo de un experimento fallido cae a casi cero, lo que significa que los ingenieros prueban más cosas. Los equipos que ramifican bien envían más rápido porque exploran más opciones antes de comprometerse con una.
Git es un registro de auditoría completo de quién cambió qué, cuándo y — si los commits están bien escritos — por qué. Cada línea de código en tu base de código tiene un autor, una marca de tiempo y un mensaje de commit adjunto a través de git blame. Esto no es vigilancia; es contexto.
Cuando encuentras un fragmento de código confuso, git blame te dice quién lo escribió y cuándo. El mensaje de commit asociado te dice por qué. El PR asociado (si tu equipo los usa) te da la discusión completa que llevó a esa decisión. Esta es la diferencia entre "No tengo idea de por qué esto está aquí" y "Ah, Sarah agregó esto en marzo para manejar el caso extremo donde la API devuelve null — aquí está el ticket."
El registro de auditoría también hace que cada cambio sea reversible. Un despliegue malo no es una crisis — está a un git revert de distancia de la recuperación. Un archivo eliminado no se ha ido — existe en cada commit antes de la eliminación. La combinación de atribución y reversibilidad da a los equipos la confianza para moverse rápido. Puedes enviar diariamente porque revertir es barato, y puedes revertir precisamente porque sabes exactamente qué cambió.
Git es una máquina del tiempo, no un respaldo
El punto no es guardar tu código — Dropbox hace eso. El punto es navegar cada estado en el que tu código ha estado, y fusionar esos estados intencionalmente.