04 feb 2020 #Techtalk

Door Wessel Loth access_time2 min

Zoeken in je git hitorie naar de boosdoener met Git Bisect!

Heb je ook wel eens aan een project gewerkt met tientallen tot honderden commits per dag? En is daar wel eens een bug geïntroduceerd zonder dat je precies kan zien welke commit de boosdoener was? Met git bisect kan je gemakkelijk tussen twee commits zoeken naar de oorzaak.

Tech Tip: Git Bisect!

Hoe werkt het? Begin simpelwel door het git bisect start commando in te typen in jouw console. Hierna kan je het eindpunt aangeven met git bisect bad <commit-hash>. Dit zal waarschijnlijk jouw meest recente commit zijn, waarvan je weet dat de codebase de bug bevat. Daarna kan je een beginpunt aangeven, bijvoorbeeld een commit waarvan je weet dat de bug er sowieso nog niet in zat. Dit kan met git bisect good <commit-hash>. Git zal nu het volgende aangeven: Bisecting: 359 revisions left to test after this (roughly 8 steps).

Git zal nu een binary search proces beginnen, waar hij als eerst de commit precies in het midden zal selecteren zodat jij kan kijken of de tests nog slagen, of dat de applicatie nog build. Als de middelste commit goed is, dan kan je door gaan met git bisect good. Mocht hij ook al de bug bevatten, dan kan je git bisect bad gebruiken om weer een stap terug in de historie te gaan. Git berekent dan de volgende commit die precies tussen het begin en het midden zit, zodat jij kan kijken of het probleem daar in de buurt zit.

 

Bisect position

 

Uiteindelijk zal je uitkomen op de boosdoener: de commit die de bug heeft geïntroduceerd. Nu weet je de context van de wijziging, en hopelijk helpt het je om de bug op te lossen. Om het netjes af te ronden zal je nog even git bisect reset moeten gebruiken om het proces te stoppen, en om weer terug te gaan naar de meest recente commit. Tot slot kan je de betreffende collega uitnodigen om taart te trakteren aan het hele team!

Vind je deze Techtip interessant en wil je meer weten, neem dan contact met ons op!

Top 3: UX (tools)
Volgend bericht
Top 3: UX (tools)