Git: deshacer, historial y ramas
El control de versiones es un punto de guardado que nunca olvida por qué existe. Te deja deshacer un cambio semanas después y responde a la pregunta con la que empieza toda caza de errores: ¿qué cambio rompió esto?
Cambiaste una línea. Una línea. Y ahora todo el sitio está roto: los precios están mal, los botones no hacen nada y no recuerdas cómo era esa línea antes. Este es el momento más común de la programación, y tiene una respuesta correcta. No es una memoria mejor y no es Ctrl+Z. Es el control de versiones.
La versión sencilla de deshacer es Ctrl+Z. Aguanta más o menos un minuto y luego se agota: cierras el editor, o guardas encima del archivo, o simplemente sigues adelante y el historial de deshacer desaparece. Además, en algún momento seguro que hiciste copias. Seamos honestos sobre cómo son: web-final.zip, web-final-2.zip, web-final-de-verdad.zip. Las copias no explican nada. Un sistema de control de versiones registra cada cambio junto con quién lo hizo, cuándo y qué intentaba conseguir. Semanas después todavía puedes preguntar exactamente qué decía esa línea y por qué se cambió.
Un commit es una foto de todo el proyecto, guardada junto con un mensaje corto. No es una diferencia ni la copia de un archivo: es el estado de todo en ese momento. Cada commit apunta al commit anterior, así que los commits forman una cadena: eso es lo que la gente llama el historial de un proyecto.
9f1c2ab
|
a17d3e0
|
64b8f21
|
(start)
$ git diff 64b8f21 a17d3e0
--- a/cart.js
+++ b/cart.js
- return net;
+ return net * (1 + VAT);Una rama es una línea de historial aparte que arranca desde la que tienes delante. La clave es que es barata: crearla lleva un momento y no cuesta casi nada, así que puedes probar una idea sin apostar el sitio que funciona. Si la idea sale bien, fusionas la rama de vuelta a la línea principal. Si no, tiras la rama y nada de lo que funcionaba ha cambiado. En un equipo, así es como varias personas trabajan a la vez sin pisarse: cada una tiene su línea y la línea principal se queda en un estado que se puede publicar.
Un conflicto de fusión ocurre cuando dos ramas han cambiado las mismas líneas. Git se niega a adivinar y pone las dos versiones en el archivo, separadas por marcas:
<<<<<<< HEAD
price = 19.00
=======
price = 21.00
>>>>>>> experimentPráctica
Ordena el camino honesto desde «esto está roto» hasta «esto está arreglado».
Pistas
- No puedes deshacer lo que nunca se registró, así que todo empieza por el guardado.
- Los usuarios reciben primero un sitio que funciona; escribir bien el arreglo y contárselo a los demás viene después.
15 XP
Empareja cada problema cotidiano con lo que de verdad lo resuelve.
Pistas
- Una rama solo ayuda si la línea principal sigue funcionando mientras experimentas: para eso están las dos líneas.
- Un conflicto es información: te dice que dos personas tocaron la misma línea, y solo una persona puede decidir cuál versión es la correcta.
13 XP
Estás a punto de guardar un cambio. ¿Qué mensaje de commit le sirve de verdad a quien lea el historial dentro de tres meses?
Pistas
- Pregúntate qué necesita la siguiente persona para entender este cambio sin abrir el código.
- Un mensaje útil dice qué cambió y por qué; el cómo ya lo muestra el propio código.
14 XP