Lo que lograrás
Usarás git bisect con un script de test automatizado para identificar el commit exacto que introdujo una regresión.
Configurar un sandbox con un bug plantado
mkdir bisect-tutorial && cd bisect-tutorial
git init
cat > calc.js <<'EOF'
function add(a, b) { return a + b; }
module.exports = { add };
EOF
git add calc.js && git commit -m "Initial calc"
for i in 1 2 3 4 5 6 7 8 9 10; do
echo "// touched: $i" >> calc.js
git commit -am "Tweak $i"
done
Escribir un reproductor
cat > test.js <<'EOF'
const { add } = require('./calc');
if (add(2, 3) !== 5) {
console.error('FAIL: add(2,3) should be 5');
process.exit(1);
}
EOF
Bisect manual
git bisect start
git bisect bad HEAD
git bisect good HEAD~12
node test.js
git bisect good
git bisect bad
Reset
git bisect reset
Bisect automatizado
git bisect start HEAD HEAD~12
git bisect run node test.js
Saltar commits no probables
git bisect skip
Personalizar términos
git bisect start --term-old=fast --term-new=slow
git bisect slow HEAD
git bisect fast v2.4.0
Qué hace que bisect funcione bien
- Commits atómicos.
- Tests reproducibles.
- Bug determinista.
Ejemplo del mundo real
git bisect start HEAD v3.0.0
git bisect run ./scripts/reproduce-issue.sh
El modelo mental
Bisect realiza búsqueda binaria a través de los commits. log2(N) verificaciones identifican el primer commit malo.