Por Anónimo (no verificado) , 29 Abril 2026

Bisección sin manos

El bisect manual requiere un veredicto humano en cada paso. git bisect run automatiza el bucle: proporciona un script que devuelve 0 para bueno, distinto de cero para malo, y 125 para "saltar este commit." Bisect llevará la búsqueda hasta el final, a menudo desatendido.

El contrato

Tu script debe:

  • Devolver 0 cuando el commit sea bueno.
  • Devolver entre 1 y 124, o 126/127, cuando sea malo.
  • Devolver 125 cuando no se pueda probar.
  • Evitar códigos fuera de estos rangos; 128+ aborta bisect.

Ejemplo

#!/usr/bin/env bash
set -e
make clean
make || exit 125              # no probable
./tests/regression-1234 || exit 1
exit 0

Conduce bisect con él:

git bisect start HEAD v2.4.0
git bisect run ./bisect-test.sh

One-liners en línea

git bisect run sh -c "make && ./run-test || exit 1"

Regresiones de rendimiento

git bisect run sh -c '
  cargo build --release || exit 125
  t=$(./bench --json | jq .ms)
  awk -v t="$t" "BEGIN { exit (t > 250) }"'

Tests intermitentes

git bisect run sh -c '
  for i in 1 2 3 4 5; do
./flaky-test || exit 1
  done
  exit 0'

Errores comunes

Devolver código 128 o más a mitad de búsqueda aborta bisect. Olvidar git bisect reset al final te deja en HEAD desacoplado. No usar exit 125 en commits no compilables causa malos falsos.

Reportes reproducibles

git bisect log > bisect.log