Von Gast (nicht überprüft) , 29 April 2026

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

  1. Den Bug reproduzieren.
  2. git blame der verdachtigen Zeile.
  3. git show den Commit; die Nachricht lesen.
  4. Bei Bedarf durch die Datei-Historie laufen.
  5. Den Autor fragen.

Etikette

Blame ist zum Verstehen, nicht zum Fingerzeigen.

Tooling

VS Codes GitLens, JetBrains Annotate, fugitive.vim.