Lo que lograrás
Usarás git blame y git log juntos para reconstruir la historia de una línea con bug, identificar cuándo y por qué se hizo un cambio, y encontrar a la persona correcta para consultar.
Configurar un sandbox
mkdir blame-tutorial && cd blame-tutorial
git init
cat > calc.js <<'EOF'
function divide(a, b) {
return a / b;
}
module.exports = { divide };
EOF
git add . && git commit -m "Initial divide function"
sed -i.bak '2i\
if (b === 0) throw new Error("Division by zero");
' calc.js && rm calc.js.bak
git commit -am "Add zero check"
sed -i.bak 's|if (b === 0)|if (b == 0)|' calc.js && rm calc.js.bak
git commit -am "Style: use loose equality for zero check"
Paso 1: blame de la línea sospechosa
git blame -L 2,3 calc.js
Paso 2: inspeccionar el commit sospechoso
git show <sha>
Paso 3: caminar la historia del archivo
git log --follow -p calc.js
Paso 4: encontrar cuándo se introdujo un string
git log -S 'Division by zero' --oneline -- calc.js
git log -G 'b\\s*[!=]==?\\s*0' --oneline -- calc.js
Paso 5: blame ignorando commits del formateador
# .git-blame-ignore-revs
abc1234 # Apply prettier across codebase
def5678 # Apply black to all Python
git config blame.ignoreRevsFile .git-blame-ignore-revs
git blame -L 2,3 calc.js
Paso 6: blame entre renames y movimientos
git blame -M calc.js
git blame -C calc.js
git blame -CCC calc.js
Paso 7: log con filtros detallados
git log --since='1 month' --author='Alice'
git log --grep='checkout'
git log -p -L :divide:calc.js
Paso 8: log de una región de un archivo
git log -L 1,5:calc.js
Paso 9: combinar con bisect
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
git bisect run npm test
Paso 10: graficar la divergencia
git log --graph --oneline --all -20
Workflow del mundo real
- Reproducir el bug.
git blamede la línea sospechosa.git showdel commit.- Si es muy grueso,
git log -p -- file. - Si muchos archivos cambiaron,
git log -- 'src/**'. - Si el mensaje carece de contexto, pregunta al autor.
Etiqueta
Blame es para entender, no para señalar.
Tooling
GitLens de VS Code, annotate de JetBrains, y fugitive.vim en Vim proporcionan UIs de blame interactivas.