{"id":4771,"date":"2024-08-19T09:15:45","date_gmt":"2024-08-19T14:15:45","guid":{"rendered":"https:\/\/www.arnoldroa.com\/?p=4771"},"modified":"2024-10-12T19:13:32","modified_gmt":"2024-10-13T00:13:32","slug":"git-bisect-rastrea-el-problema-como-un-detective-digital","status":"publish","type":"post","link":"https:\/\/www.arnoldroa.com\/en\/desarrollo\/git-bisect-rastrea-el-problema-como-un-detective-digital\/","title":{"rendered":"Git Bisect &#8211; Rastrea el problema como un detective digital"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17.png\"><img loading=\"lazy\" decoding=\"async\" width=\"644\" height=\"646\" src=\"https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17.png\" alt=\"\" class=\"wp-image-4774\" srcset=\"https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17.png 644w, https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17-300x300.png 300w, https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17-150x150.png 150w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/figure>\n\n\n\n<p>En el mundo del desarrollo de software, a veces las cosas van mal. Imagina que un d\u00eda, despu\u00e9s de una serie de cambios en tu proyecto, algo deja de funcionar y no est\u00e1s seguro de qu\u00e9 cambio espec\u00edfico lo caus\u00f3. Podr\u00edas revisar cada commit manualmente, pero eso ser\u00eda tedioso y propenso a errores. Personalmente he visto como los desarrolladores invierten una cantidad considerable de tiempo intentando identificar que introdujo un bug cuando hay herramientas que pueden hacer esto mucho mas facil, incluso de manera automatizada (si hay una buena bateria de tests, ya sean unitarios o funcionales). Aqu\u00ed es donde entra en juego <code>git bisect<\/code>, una poderosa herramienta de Git que te permite localizar r\u00e1pidamente el commit exacto que introdujo el error.<\/p>\n\n\n\n<p>Para hacer que esta explicaci\u00f3n sea m\u00e1s entretenida, vamos a contar la historia de un detective digital llamado <strong>Gitti<\/strong>, quien recibe una misi\u00f3n especial: encontrar al <strong>bicho travieso<\/strong> que est\u00e1 causando problemas en su <strong>ciudad del c\u00f3digo<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La Ciudad del C\u00f3digo y el Bicho Travieso<\/h2>\n\n\n\n<p>Hab\u00eda una vez en la <strong>Ciudad del C\u00f3digo<\/strong>, un lugar donde todo funcionaba perfectamente gracias a los ciudadanos llamados <strong>commits<\/strong>. Cada commit ten\u00eda su trabajo especial, ya fuera pintar las casas (interfaz de usuario), mantener las calles limpias (optimizaci\u00f3n del c\u00f3digo) o asegurar que todos los sem\u00e1foros funcionaran correctamente (pruebas automatizadas).<\/p>\n\n\n\n<p>Un d\u00eda, un <strong>bicho travieso<\/strong> se infiltr\u00f3 en la ciudad. De repente, los sem\u00e1foros empezaron a fallar y las calles se llenaron de basura. La <strong>Alcaldesa Repo<\/strong>, quien dirig\u00eda la Ciudad del C\u00f3digo, sab\u00eda que hab\u00eda un problema, pero no sab\u00eda cu\u00e1ndo o c\u00f3mo hab\u00eda aparecido el bicho.<\/p>\n\n\n\n<p>Fue entonces cuando llam\u00f3 a <strong>Gitti<\/strong>, el detective digital m\u00e1s astuto de todos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es Git Bisect?<\/h2>\n\n\n\n<p>En t\u00e9rminos t\u00e9cnicos, <code>git bisect<\/code> es un comando de Git que utiliza la b\u00fasqueda binaria para encontrar el commit que introdujo un error. B\u00e1sicamente, te permite identificar cu\u00e1l fue el primer commit en el que apareci\u00f3 un problema en tu c\u00f3digo, dividiendo la historia de commits en dos partes y probando en qu\u00e9 parte est\u00e1 el error, reduciendo la b\u00fasqueda a medida que avanzas.<\/p>\n\n\n\n<p>El proceso es simple:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Identificas un commit donde el c\u00f3digo estaba funcionando correctamente (el commit &#8220;bueno&#8221;).<\/li>\n\n\n\n<li>Identificas un commit donde el c\u00f3digo est\u00e1 roto (el commit &#8220;malo&#8221;).<\/li>\n\n\n\n<li>Git divide el rango de commits entre estos dos puntos y selecciona el commit en el medio para que lo pruebes.<\/li>\n\n\n\n<li>Seg\u00fan tu respuesta (si el commit es bueno o malo), Git seleccionar\u00e1 la mitad de los commits restantes y repetir\u00e1 el proceso hasta encontrar el commit que introdujo el problema.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Iniciando el Rastreo con Gitti<\/h2>\n\n\n\n<p>La <strong>Alcaldesa Repo<\/strong> le dio a Gitti dos pistas cruciales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Primera pista<\/strong>: El commit <code>1a2b3c<\/code> (o <strong>barrio<\/strong> <code>1a2b3c<\/code>), donde todo funcionaba a la perfecci\u00f3n.<\/li>\n\n\n\n<li><strong>Segunda pista<\/strong>: El commit <code>9z8x7y<\/code> (o <strong>barrio<\/strong> <code>9z8x7y<\/code>), donde los problemas comenzaron a surgir.<\/li>\n<\/ul>\n\n\n\n<p>Gitti, armado con esta informaci\u00f3n, se dispuso a encontrar el bicho travieso. Comenz\u00f3 dividiendo la ciudad en dos partes iguales, investigando el barrio en el medio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usando Git Bisect en la Terminal<\/h2>\n\n\n\n<p>Vamos a ponerlo en pr\u00e1ctica. Supongamos que estamos trabajando en un proyecto y encontramos que algo dej\u00f3 de funcionar despu\u00e9s de una serie de commits.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 1: Inicializa Git Bisect<\/h3>\n\n\n\n<p>Primero, debemos iniciar el proceso de bisect. Vamos a decirle a Git cu\u00e1l es el \u00faltimo commit bueno y cu\u00e1l es el commit donde notamos que algo est\u00e1 mal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git bisect start\ngit bisect bad 9z8x7y  # Commit donde se rompi\u00f3 el c\u00f3digo\ngit bisect good 1a2b3c  # \u00daltimo commit conocido donde todo funcionaba<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed, le hemos dicho a Git que el commit <code>9z8x7y<\/code> es el malo y el commit <code>1a2b3c<\/code> es el bueno.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 2: Prueba los Commits<\/h3>\n\n\n\n<p>Git autom\u00e1ticamente seleccionar\u00e1 el commit a mitad de camino entre el bueno y el malo y te pedir\u00e1 que lo pruebes.<\/p>\n\n\n\n<p>Gitti llega al barrio <code>5f6d7a<\/code>, donde sospecha que podr\u00eda estar el bicho. <strong>\u00bfFuncionan bien los sem\u00e1foros aqu\u00ed?<\/strong><\/p>\n\n\n\n<p>En la terminal, probamos el c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ejecuta las pruebas o verifica manualmente si el error persiste<\/code><\/pre>\n\n\n\n<p>Si el c\u00f3digo funciona bien, le decimos a Git:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git bisect good<\/code><\/pre>\n\n\n\n<p>Si el c\u00f3digo sigue teniendo problemas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git bisect bad<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 3: Itera hasta Encontrar el Problema<\/h3>\n\n\n\n<p>Git continuar\u00e1 dividiendo los commits restantes y te pedir\u00e1 que sigas probando. Cada vez que marcas un commit como bueno o malo, Git ajusta su b\u00fasqueda, acotando poco a poco el commit problem\u00e1tico.<\/p>\n\n\n\n<p>Despu\u00e9s de varias rondas, Gitti finalmente encuentra el barrio problem\u00e1tico: <code>8h7g6f<\/code>. Aqu\u00ed, descubre que un peque\u00f1o y malicioso fragmento de c\u00f3digo introdujo al <strong>bicho travieso<\/strong>. Ahora, con el bicho encontrado, puede trabajar en erradicarlo y restaurar la paz en la Ciudad del C\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 4: Finaliza Git Bisect<\/h3>\n\n\n\n<p>Una vez que hayas encontrado el commit que introdujo el problema, puedes finalizar el proceso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git bisect reset<\/code><\/pre>\n\n\n\n<p>Esto devolver\u00e1 tu repositorio al estado en que estaba antes de comenzar el bisect.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Gitti y el Bicho Travieso<\/h2>\n\n\n\n<p>Gitti, nuestro detective digital, al encontrar al bicho travieso en el barrio <code>8h7g6f<\/code>, notific\u00f3 a la <strong>Alcaldesa Repo<\/strong>, quien inmediatamente envi\u00f3 a sus mejores programadores a reparar el da\u00f1o. Los sem\u00e1foros volvieron a funcionar, las calles se limpiaron, y la Ciudad del C\u00f3digo volvi\u00f3 a ser un lugar feliz y funcional.<\/p>\n\n\n\n<p>La <strong>Alcaldesa Repo<\/strong> estaba tan contenta con el trabajo de Gitti que decidi\u00f3 hacer de \u00e9l su detective permanente. Cada vez que un bicho travieso aparec\u00eda en la Ciudad del C\u00f3digo, Gitti estaba all\u00ed para encontrarlo y asegurarse de que todo volviera a la normalidad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Git bisect es como tener un detective digital en tu equipo, listo para investigar y resolver problemas en tu c\u00f3digo de manera eficiente. No importa si est\u00e1s trabajando en un peque\u00f1o proyecto personal o en un gran repositorio corporativo, esta herramienta puede ahorrarte horas de trabajo y frustraci\u00f3n.<\/p>\n\n\n\n<p>La pr\u00f3xima vez que enfrentes un problema en tu c\u00f3digo y no sepas cu\u00e1ndo o c\u00f3mo apareci\u00f3, recuerda a Gitti, el detective digital, y deja que <code>git bisect<\/code> te gu\u00ede hacia la soluci\u00f3n.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u00bfAlguna vez te has sentido perdido en el mar de commits buscando un error que no sabes cu\u00e1ndo apareci\u00f3? \u00a1No te preocupes! Con `git bisect`, encontrar ese problema se convierte en una misi\u00f3n de detectives. Descubre c\u00f3mo Gitti, nuestro detective digital, rastrea al bicho travieso en la Ciudad del C\u00f3digo. A trav\u00e9s de una historia l\u00fadica y una explicaci\u00f3n t\u00e9cnica detallada, aprender\u00e1s a usar `git bisect` para resolver problemas en tu c\u00f3digo de manera eficiente. \u00a1Sum\u00e9rgete en esta aventura y domina una herramienta que puede ahorrarte horas de frustraci\u00f3n!<\/p>","protected":false},"author":1,"featured_media":4774,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[32],"tags":[91],"class_list":["post-4771","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo","tag-git"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.arnoldroa.com\/wp-content\/uploads\/2024\/08\/2024-08-19_09-17.png","_links":{"self":[{"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/posts\/4771"}],"collection":[{"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/comments?post=4771"}],"version-history":[{"count":3,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/posts\/4771\/revisions"}],"predecessor-version":[{"id":4776,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/posts\/4771\/revisions\/4776"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/media\/4774"}],"wp:attachment":[{"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/media?parent=4771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/categories?post=4771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.arnoldroa.com\/en\/wp-json\/wp\/v2\/tags?post=4771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}