Da Anonimo (non verificato) , 29 Aprile 2026

Cosa otterrai

Userai git bisect con uno script di test automatizzato per identificare il commit esatto che ha introdotto una regressione.

Configurare un sandbox con un bug piantato

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

git checkout HEAD~5
sed -i.bak 's/a + b/a - b/' calc.js && rm calc.js.bak
git commit -am "Refactor add (oops)"
git checkout main
git rebase HEAD~5

Scrivere un riproduttore

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 manuale

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 automatizzato

git bisect start HEAD HEAD~12
git bisect run node test.js

Saltare commit non testabili

git bisect skip

Personalizzare i termini

git bisect start --term-old=fast --term-new=slow
git bisect slow HEAD
git bisect fast v2.4.0

Cosa rende il bisect funzionante

  • Commit atomici.
  • Test riproducibili.
  • Bug deterministico.

Esempio reale

git bisect start HEAD v3.0.0
git bisect run ./scripts/reproduce-issue.sh