Was Sie erreichen werden
Sie werden git blame und git log zusammen verwenden, um die Historie einer fehlerhaften Zeile zu rekonstruieren.
Einen Sandbox einrichten
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"
Schritt 1: die verdachtige Zeile blamen
git blame -L 2,3 calc.js
Schritt 2: den verdachtigen Commit inspizieren
git show <sha>
Schritt 3: durch die Datei-Historie laufen
git log --follow -p calc.js
Schritt 4: finden, wann ein String eingefuhrt wurde
git log -S 'Division by zero' --oneline -- calc.js
git log -G 'b\\s*[!=]==?\\s*0' --oneline -- calc.js
Schritt 5: Blame ohne Formatter-Commits
# .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
Schritt 6: Blame uber Umbenennungen und Verschiebungen
git blame -M calc.js
git blame -C calc.js
git blame -CCC calc.js
Schritt 7: Log mit detaillierten Filtern
git log --since='1 month' --author='Alice'
git log --grep='checkout'
git log -p -L :divide:calc.js
Schritt 8: Log einer Datei-Region
git log -L 1,5:calc.js
Schritt 9: mit Bisect kombinieren
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
git bisect run npm test
Schritt 10: die Divergenz graphen
git log --graph --oneline --all -20
Realer Workflow
- Den Bug reproduzieren.
git blameder verdachtigen Zeile.git showden Commit; die Nachricht lesen.- Bei Bedarf durch die Datei-Historie laufen.
- Den Autor fragen.
Etikette
Blame ist zum Verstehen, nicht zum Fingerzeigen.
Tooling
VS Codes GitLens, JetBrains Annotate, fugitive.vim.