¿Qué es Git?


Es casi seguro que has hecho control de versiones manualmente. Una carpeta con reporte.docx, reporte_final.docx, reporte_final_v2.docx y reporte_final_ACTUAL.docx es control de versiones, del peor tipo posible. No puedes saber qué cambió entre dos de esos archivos, no puedes fusionar ediciones que dos personas hicieron al mismo tiempo, y definitivamente no puedes recuperar el párrafo bueno que eliminaste hace tres copias.
Git resuelve ese problema correctamente. Es una herramienta que registra snapshots de tu proyecto a lo largo del tiempo, para que todo tu historial viva en un solo lugar en lugar de un montón de copias. La herramienta en sí es un pequeño programa que vive en tu propia computadora: escribes comandos que comienzan con git en una terminal, y te responde en texto.
Qué Git hace por ti
En esencia, Git mantiene una línea de tiempo de tu proyecto. Cada vez que llegas a un punto que vale la pena guardar, registras un commit: un snapshot de cada archivo, más un mensaje corto describiendo qué cambió y por qué. Más tarde puedes mirar atrás en esa línea de tiempo y ver exactamente cómo el proyecto llegó a donde está. Aquí hay una línea de tiempo real, impresa por git log, el comando que lista los commits de un proyecto (la bandera --oneline acorta cada uno a una sola línea):
$ git log --oneline
a1b2c3d Agregar medidor de fortaleza de contraseña
9f8e7d6 Corregir validación de formulario de registro
5c4b3a2 Configurar estructura del proyectoEsos son tres puntos guardados en el historial de un proyecto, el más nuevo al principio, cada uno con un ID corto y el mensaje que escribió su autor. (En cada ejemplo como este, la línea que comienza con $ es un comando escrito en una terminal, sin el $ en sí, y las líneas debajo son la respuesta de Git.) Aprenderás cada comando que produce y lee este historial en los próximos capítulos. Por ahora, la idea a la que aferrarse es que Git está registrando tu trabajo como una serie de snapshots a los que siempre puedes volver.
Una vez que tu proyecto tiene un historial como este, muchas cosas se hacen posibles. Puedes ver qué cambió y quién lo cambió. Puedes intentar una idea arriesgada en paralelo y descartarla limpiamente si no funciona. Puedes entregar todo el proyecto, con su historial completo, a otra persona. Y cuando dos personas editan el mismo código, Git puede combinar su trabajo e indicar los lugares donde no están de acuerdo para que un humano pueda resolverlos. Esas cuatro capacidades: historial, experimentos seguros, compartición y combinación de trabajo, son la razón completa por la que Git funciona bajo casi cada base de código profesional.
final_v2_ACTUAL es el problema para el que Git fue construido para terminar, y te prometo que se siente genial la primera vez que eliminas uno. Git y GitHub son cosas diferentes
Esto confunde a casi todos al principio, así que aquí está en términos claros. Git es la herramienta de control de versiones. Funciona en tu propia computadora, registra tus commits, y no necesita conexión a internet ni cuenta para funcionar. GitHub es un sitio web que almacena repositorios de Git en línea y agrega cosas alrededor de ellos: un lugar para compartir tu código, revisar los cambios entre ustedes, reportar problemas y colaborar.
La forma más clara de sentir la diferencia: puedes usar Git todos los días, haciendo commits y ramificaciones en tu laptop, sin nunca crear una cuenta de GitHub. GitHub solo entra en la imagen cuando quieres poner tu repositorio en algún lugar compartido para que otras personas, u otras máquinas, puedan alcanzarlo. Git es el motor; GitHub es un lugar para alojar lo que produce. Otros existen, como GitLab y Bitbucket, y todos alojan los mismos repositorios de Git debajo.
De dónde vino Git
El historial de Git explica mucho sobre por qué funciona como lo hace. Fue escrito en 2005 por Linus Torvalds, la misma persona que inició Linux. El kernel de Linux es construido por miles de voluntarios dispersos por todo el mundo, y durante algunos años coordinaron todo ese trabajo usando una herramienta comercial llamada BitKeeper, que la empresa detrás de ella permitía que los proyectos de código abierto usaran de forma gratuita.
En 2005 ese arreglo gratuito se vino abajo, y la comunidad del kernel de repente no tenía herramienta para manejar su enorme y rápido código base. Nada más disponible en ese momento podía mantener el ritmo. Entonces Torvalds se apartó del trabajo del kernel por un par de semanas y escribió su propia herramienta de control de versiones, con algunos objetivos firmes formados por exactamente ese problema.
Quería que fuera distribuida, para que cada colaborador tuviera el historial completo del proyecto en su propia máquina y pudiera trabajar sin reportar a un servidor central. Quería que fuera rápida, lo suficientemente rápida para manejar un proyecto del tamaño del kernel sin hacer esperar a las personas. Y quería garantizar integridad, para que nadie pudiera alterar silenciosamente el historial y ningún error de disco pudiera corromper un proyecto sin que se notara.
Esos objetivos son por qué Git se comporta como lo hace hoy. Cuando clonas un proyecto, obtienes su historial completo para trabajar, que es el objetivo distribuido en acción: puedes hacer commit, ramificar y navegar el historial en un avión sin wifi. Y cada commit está marcado con una huella digital calculada a partir de su contenido exacto, así que si alguna vez un solo byte cambia, la huella digital deja de coincidir y Git lo nota. Las decisiones de diseño que Torvalds hizo apresuradamente en 2005 son en las que confías cada vez que usas Git ahora.
clonar te da el historial completo para trabajar sin conexión, y por qué cada commit obtiene una huella digital. Contexto práctico para una herramienta que usarás durante años. A dónde va este manual a continuación
Con el modelo mental en su lugar, el resto de la pista se trata de hacer el trabajo. Tu primer repositorio comienza desde cero: abriendo una terminal, instalando Git si tu máquina no lo tiene, y convirtiendo una carpeta en un repositorio al que puedes hacer commit. Desde allí aprenderás el bucle cotidiano de guardar cambios, luego ramas, fusiones y el flujo de colaboración en GitHub. Si un término alguna vez te confunde, el Glosario tiene una definición corta para cada pieza del vocabulario de Git en estos documentos.

