git blame
Beschreibung
Der Befehl git blame ist ein flexibles Tool mit verschiedenen Anwendungsmöglichkeiten. Die wichtigste Funktion des git blame-Befehls ist die Anzeige der Autorenmetadaten, die einer bestimmten, festgeschriebenen Zeile in einer Datei zugeordnet sind. Er wird verwendet, um die Dateiverlauf zu erkunden und herauszufinden, wer als letztes die Zeile geändert hat.

Funktionsweise
Um klar zu zeigen, wie git blame funktioniert, betrachten wir ein Beispiel, in dem wir eine README.md-Datei mit einigen Commits von verschiedenen Autoren haben.
Im folgenden Beispiel verwenden wir git blame. Der Zustand des Beispiel-Repositories kann mit einem git log erkundet werden. Der Commit-Verlauf sieht wie folgt aus:
git log und git blame
git log
commit 745a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a
Author: Bob Smith <[email protected]m>
Date: Fri Apr 1 19:55:15 2019 +0000
Another commit to help git blame track the who, the what, and the when
commit eb06faedb1fdd159d62e4438fc8dbe9c9fe0728b
Author: Bob Smith <[email protected]m>
Date: Fri Apr 1 19:53:23 2019 +0000
Creating the third commit, along with Nick and Robert, so that Nick can get git blame docs.
commit 990c2b6a84464fee153253dbf02e845a4db372bb
Merge: 82496ea 89feb84
Author: Tom Brown <[email protected]m>
Date: Fri Apr 1 05:33:01 2019 +0000
Merged in tom-brown/git-blame-example/albert-so/readmemd-edited-online-with-bitbucket-1519865641474 (pull request #2)
README.md edited online with Bitbucket
commit 73a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8
Author: Tom Brown <[email protected]m>
Date: Fri Apr 1 00:54:03 +0000
README.md edited online with BitbucketDer Befehl git blame arbeitet mit einzelnen Dateien. Die Standardausführung von git blame gibt die Blame-Informationen für die angegebene Datei aus.
Die folgende Ausgabe ist eine Teilmenge der vollständigen Blame-Ausgabe der README-Datei:
git blame
git blame README.md
83253a1b (marioswift 2019-02-28 13:37:02 -0800 1) # Git Blame example
83253a1b (marioswift 2019-02-28 13:37:02 -0800 2)
73a0b1c2 (Tom Brown 2019-04-01 00:54:03 +0000 3) Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.
83253a1b (marioswift 2019-02-28 13:37:02 -0800 4)
83253a1b (marioswift 2019-02-28 13:37:02 -0800 5) There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.
83253a1b (marioswift 2019-02-28 13:37:02 -0800 6)
73a0b1c2 (Tom Brown 2019-04-01 00:54:03 +0000 7) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod TEMPOR incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laborum nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumHäufige Optionen
Sie können die Ausgabe auch mit der Option -L auf bestimmte Zeilen beschränken, wie in der folgenden Tabelle gezeigt.
| git blame -L 1,3 README.md | Beschränkt die Ausgabe auf den angeforderten Zeilenbereich. Hier haben wir die Ausgabe auf die Zeilen 1 bis 3 beschränkt. |
|---|---|
| git blame -e README.md | Zeigt die E-Mail-Adresse des Autors anstelle des Benutzernamens an. |
| git blame -w README.md | Ignoriert Leerzeichenänderungen. Wenn ein vorheriger Autor die Formatierung geändert hat (z. B. Tabs zu Leerzeichen), kann dies die tatsächlichen Inhaltsänderungen in der Ausgabe verschleiern. |
| git blame -M README.md | Die Option -M erkennt verschobene oder kopierte Zeilen innerhalb derselben Datei. Dadurch wird der ursprüngliche Autor der Zeilen anstelle des letzten Autors gemeldet, der die Zeilen verschoben oder kopiert hat. |
| git blame -C README.md | Die Option -C erkennt Zeilen, die aus anderen Dateien verschoben oder kopiert wurden. Dadurch wird der ursprüngliche Autor der Zeilen anstelle des letzten Autors gemeldet, der die Zeilen verschoben oder kopiert hat. |
| git blame -p README.md | Zeigt die vollständige Diff-Ausgabe für jede Zeile an, wodurch es einfacher wird, genau zu sehen, was geändert wurde. |
Git Blame vs. Git Log
Der Befehl git blame zeigt den letzten Autor an, der eine Zeile geändert hat, aber manchmal möchten Sie möglicherweise sehen, wann eine Zeile ursprünglich hinzugefügt wurde. Dies kann mit git blame schwierig sein. Zu diesem Zweck kann eine Kombination der Optionen -w, -C und -M verwendet werden. Es ist jedoch einfacher, git log zu verwenden.
Verwenden Sie git log mit der Option -S, um Commits anzuzeigen, bei denen eine bestimmte Zeichenkette hinzugefügt oder entfernt wurde.
Betrachten wir das folgende Beispiel:
git log -S example
git log -S "CSS3D and WebGL renderers." --pretty=format:'%h %an %ad %s'
e339d3c85a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d John Carter Fri Jun 13 16:51:06 2015 +0200 reverted README.md to original content
509c2cc35a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d Max Fri Jul 8 13:56:14 2015 +0200 Updated README
cb20237cc1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6 Leo Sat Aug 31 00:22:36 2012 +0100 Removed DOMRenderer. Now with the CSS3DRenderer it has become irrelevant.Die Ausgabe zeigt, dass die Datei README.md von drei Autoren dreimal hinzugefügt und geändert wurde. Die Option --pretty=format:'...' passt die git log-Ausgabe an, um bestimmte Felder wie Commit-Hash, Autor, Datum und Betreff anzuzeigen.
Praxis
Welche Funktionen und Optionen hat der Befehl 'git blame' in Git?