git blame
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>Optionen
Die richtige Option wählen
Herausfinden, woher eine Änderung kam
Drei Werkzeuge, drei Fragen
| Befehl | Beantwortet |
|---|---|
git blame file | Welcher Commit hat jede Zeile zuletzt berührt? |
git log -p file | Jede Ä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.jsJede Zeile mit letztem Commit, Autor und Datum.
Ein Zeilenbereich
git blame -L 10,20 app.jsNur die Zeilen 10 bis 20.
Eine ältere Version
git blame v1.0 -- app.jsBlame der Datei, wie sie bei Tag v1.0 war.
Workflow-Beispiele
git blame -L 40,45 app.jsDen Commit der Zeile finden
git show a1b2c3dDen 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
Die Zeile stammt aus dem ersten Commit der Historie: blame konnte nicht weiter zurück.
Eine Zeile, die du in deiner Arbeitskopie geändert, aber nicht committet hast.