git blame

Fehlersuche

Zeigen, wer jede Zeile einer Datei zuletzt geändert hat


Der Befehl 'git blame' gibt eine Datei aus und zeigt zu jeder Zeile den Commit, der sie zuletzt geändert hat, samt Autor und Datum. So findest du am schnellsten heraus, warum eine Zeile so aussieht: nimm den Hash und lies den ganzen Commit mit git show. Noch nicht committete Zeilen sind als „Not Committed Yet" markiert. Mit -L siehst du nur einige Zeilen.

Syntax

git blame [<options>] [<rev>] [--] <file>
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (2)

Nur den angegebenen Zeilenbereich annotieren, z. B. -L 10,20 (oder eine Funktion mit -L :name).

EmpfohlenKonzentriere dich auf die Zeilen, die du untersuchst

Beispiel

git blame -L 12,14 app.js

Zeigt die E-Mail des Autors statt des Namens.

Bei BedarfAutoren-E-Mails zeigen, wenn Namen mehrdeutig sind

Beispiel

git blame -e app.js

Erfahren (1)

Tut so, als hätte ein Commit (z. B. eine große Umformatierung) nichts geändert; die Zeilen werden früheren Commits zugeordnet.

Bei BedarfReine Formatierungs-Commits überspringen

Beispiel

git blame --ignore-rev a1b2c3d app.js

Die richtige Option wählen

Herausfinden, woher eine Änderung kam

Drei Werkzeuge, drei Fragen

BefehlBeantwortet
git blame fileWelcher Commit hat jede Zeile zuletzt berührt?
git log -p fileJede Änderung, die je an der Datei gemacht wurde
git log -S "text"Welcher Commit hat diesen Text hinzugefügt oder entfernt?

Beispiele

Blame einer Datei

git blame app.js

Jede Zeile mit letztem Commit, Autor und Datum.


Ein Zeilenbereich

git blame -L 10,20 app.js

Nur die Zeilen 10 bis 20.


Eine ältere Version

git blame v1.0 -- app.js

Blame der Datei, wie sie bei Tag v1.0 war.

Workflow-Beispiele

1
git blame -L 40,45 app.js

Den Commit der Zeile finden

2
git show a1b2c3d

Den ganzen Commit und seine Nachricht lesen

Fehlerbehebung

fatal: no such path 'x' in HEAD

Ursache: Die Datei ist nicht verfolgt, oder der Pfad ist falsch

Committe die Datei zuerst, oder prüfe den Pfad

Jede Zeile zeigt auf einen Umformatierungs-Commit

Ursache: Blame zeigt die LETZTE Änderung

Nutze --ignore-rev <commit>, oder blame den Commit davor

Tipps & Stolperfallen

Best Practices

  • ✓Lies den Commit (git show), bevor du aus blame Schlüsse ziehst.
  • ✓Führe eine .git-blame-ignore-revs-Datei mit reinen Formatierungs-Commits.

Häufige Fehler

  • ✗blame als Schuldzuweisung verstehen: wer eine Zeile zuletzt anfasste, hat sie vielleicht nur umformatiert.
  • ✗Bei einem Formatierungs-Commit stehen bleiben, statt dessen Elternteil zu blamen (git blame <hash>^ -- file).
  • ✗-L bei großen Dateien vergessen und durch tausende Zeilen scrollen.

FAQ

A:

Die Zeile stammt aus dem ersten Commit der Historie: blame konnte nicht weiter zurück.

A:

Eine Zeile, die du in deiner Arbeitskopie geändert, aber nicht committet hast.