Git-Tutorial: Repositories untersuchen (Teil 2: git log)

In einer Reihe von Tutorials stellen wir die wichtigsten Befehle des verteilten Versionskontrollsystems Git vor. Nach dem initialen Aufsetzen von Git und dem Speichern von Änderungen sollen nun Repositories untersucht werden. Nach den Erläuterungen zu git status folgen hier Hinweise zu git log.

git log

Der Befehl git log zeigt committete Snapshots. Er lässt den Entwickler die Projekt-Historie auflisten, sie filtern und nach spezifischen Änderungen suchen. Während git status dazu dient, das Arbeitsverzeichnis und den Staging-Bereich zu inspizieren, betrifft git log nur die committete Historie.

Es gibt verschiedene Möglichkeiten, die Log-Ausgabe anzupassen, vom einfachen Filtern von Commits bis zur Anzeige von Commits in einem vollständig benutzerdefinierten Format. Unten sind einige der gebräuchlichsten Konfigurationsoptionen von git log.

Nutzung

git log

Zeigt die gesamte Commit-Historie in der voreingestellten Formatierung an. Wenn die Ausgabe einen Bildschirm übersteigt, kann mit der Leertaste gescrollt und mit q beendet werden.

git log -n <limit>

Begrenzt die Anzahl der Commits um den Wert bei <limit>. git log -n 3 zeigt beispielsweise drei Commits.

git log --oneline

Komprimiert jeden Commit auf eine einzelne Zeile. Das ist hilfreich, um sich einen breiten Überblick über die Projekt-Historie zu verschaffen.

git log --stat

Bietet neben den Standardinformationen Infos über die geänderten Dateien und über die relative Anzahl der hinzugefügten oder entfernten Zeilen für jede dieser Dateien.

git log -p

Zeigt den Patch, der jeden Commit repräsentiert. Die Option stellt für jeden Commit die kompletten Diffs dar. Dies ist der detaillierteste Blick auf die Projekt-Historie.

git log --author="<muster>"

Sucht nach Commits eines bestimmten Autoren. Das Argument <muster> kann ein einfacher String oder ein regulärer Ausdruck sein.

git log --grep="<muster>"

Sucht nach Commits mit Commit-Nachrichten, die auf <muster> passen. Dies kann ein einfacher String oder ein regulärer Ausdruck sein.

git log <von>..<bis>

Zeigt nur Commits zwischen <von> und <bis>. Bei diesen beiden Argumenten kann es sich um Commit-IDs, Branch-Namen, HEAD oder jede andere Art von Revisionsreferenzen handeln.

git log <datei>

Zeigt nur Commits, die die spezifische Datei enthalten. Das ist eine einfache Möglichkeit, die Historie einer bestimmten Datei nachzuvollziehen.

git log --graph --decorate --oneline

Einige weitere hilfreiche Optionen. --graph gibt einen textbasierten Graphen der Commits auf der linken Seite der Commit-Nachrichten aus. --decorate fügt die Namen der Branches oder die Tags der Commits hinzu, die gezeigt werden. --oneline zeigt die Commit-Informationen in einer einzelnen Zeile und macht das Brwosen durch Commits einfacher.

Hinweise

git log ist das grundlegende Werkzeug, das Git zum Untersuchen der Repository-Historie mitbringt. Es wird beispielsweise genutzt, um eine spezifische Version eines Projekts zu finden oder um einzusehen, welche Änderungen durch Mergen in einen Feature-Branch eingeführt wurden.

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: Paul Schmidt

Das meiste davon ist ziemlich gradlinig, dennoch verlangt die erste Zeile ein paar Erläuterungen. Der 40-Zeichen-Strang nach commit ist eine SHA-1-Prüfsumme der Inhalte der Commits. Das dient zwei Zwecken. Erstens: Die Integrität des Commits wird sichergestellt. Wäre er je beschädigt gewesen, würde der Commit eine andere Prüfsumme generieren. Zweitens: Der Strang dient als unikale ID für den Commit.

Diese ID kann in Befehlen wie git log <von>..<bis> zum Einsatz kommen, um auf spezifische Commits zu verweisen. Beispielsweise wird git log 3157e..5ab91 alles zwischen den Commits mit den IDs 3157e und 5ab91 anzeigen. Abgesehen von Prüfsummen sind Branch-Namen und das HEAD-Keyword andere gebräuchliche Methoden, um auf individuelle Commits zu verweisen. HEAD referenziert immer den aktuellen Commit, sei es ein Branch oder ein spezifischer Commit.

Das Zeichen ~ ist hilfreich, um relative Referenzen auf Parents eines Commits zu markieren. Beispielsweise verweist 3157e~1 auf den Commit vor 3157e, und HEAD~3 ist der "Urgroßvater" des aktuellen Commits.

Die Idee hinter diesen Identifikationsmethoden ist die, dass Entwicklern Aktionen möglich sein sollen, die auf spezifischen Commits basieren. Der Befehl git log ist ein typischer Startpunkt für diese Interaktionen, denn mit ihm lassen sich die Commits auffinden, mit denen man arbeiten will.

Beispiel

Der Abschnitt Nutzung bietet bereits viele Beispiele und Optionen. Interessant ist, dass diverse Optionen in einem einzelnen Befehl miteinander kombiniert werden können:

git log --author="Paul Schmidt" -p hallo.py

Dies gibt die kompletten Diffs aller Änderungen aus, die Paul Schmidt an der Datei hallo.py vorgenommen hat.

Die ..-Syntax ist sehr nützlich, wenn es um das Vergleichen von Branches geht. Das folgende Beispiel gibt einen kurzen Überblick aller Commits aus, die in ein-feature, aber nicht im master sind:

git log --oneline master..ein-feature

Weiterführende Infos: Ihr Partner für Git und Stash

Kennen Sie Stash, Atlassians Git-Repository-Managementsystem? Stash bietet eine zentrale Lösung zum Management des gesamten distributierten Codes: Hier kommen alle Git-Repositories im Unternehmen zusammen, hier finden Entwickler immer die letzte offizielle Version eines Projekts, hier können Projektverantwortliche Berechtigungen kontrollieren, um sicherzustellen, dass die richtigen Nutzer Zugriff auf den richtigen Code haben.

Möchten Sie mehr erfahren? Wir sind offizieller Vertriebspartner von Atlassian und einer der größten Atlassian Experts Partner weltweit. Gerne unterstützen wir Sie bei der Evaluierung, Lizenzierung und Adaption von Stash. Und wenn Sie Atlassian-Lizenzen bei //SEIBERT/MEDIA kaufen, gewähren wir Ihnen einen Rabatt in Höhe von 10% der Lizenzkosten in Form von Beratungsleistungen. Bitte sprechen Sie uns einfach an.

99 Argumente für Stash als Git-Repository-Manager
Branch-basierte Git-Workflows mit Stash adaptieren
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo
Interview: Die Vorteile von Git in der Software-Entwicklung und die Möglichkeiten von Stash
So funktioniert die Lizenzierung von Atlassian-Produkten