So überprüfen Sie den Verlauf eines Projekts mit Git Log
Einer der grundlegendsten Dienste von Git ist die Projekthistorie. Da Git alle Änderungen an Dateien verfolgt, die in einem Repository vorgenommen wurden, kann es sehr leistungsstarke Protokollierungsfunktionen bieten. Sie können den Verlauf eines Projekts auf viele verschiedene Arten abfragen und mit einem flexiblen Befehl verschiedene Daten extrahieren und anzeigen.
Der Befehl git log ist riesig, der größte aller regulären Git-Befehle. Sein Handbuch ist über 2.500 Zeilen lang. Glücklicherweise bietet git log einen Großteil seines nützlichsten Verhaltens mit nur wenigen Schlüsseloptionen.
Grundlegende Protokollierung mit dem Standardverhalten
Standardmäßig zeigt git log eine umgekehrt chronologische Liste von Commits an. Jeder Commit enthält seinen Hash, Autor, Datum und die Commit-Nachricht:
Der Befehl verwendet einen Pager (z. B. weniger, mehr), um die vollständige Ausgabe anzuzeigen, damit Sie leicht durch die Ergebnisse navigieren können. Sie können Git so konfigurieren, dass es ein Programm Ihrer Wahl verwendet, z. B. den meisten Pager .
Hier sind einige Git-Log-Ausgaben aus dem Repository des Git-Quellcodes selbst:
commit 670b81a890388c60b7032a4f5b879f2ece8c4558 (HEAD -> master, origin/next,
origin/master, origin/HEAD)
Author: Junio C Hamano <[email protected]>
Date: Mon Jun 14 13:23:28 2021 +0900
The second batch
Signed-off-by: Junio C Hamano <[email protected]>
Das Ergebnis beginnt mit dem Commit-Hash ( 670 …) gefolgt von einer Liste der Branches, die aktuell auf diesen Commit zeigen ( HEAD -> master , etc.)
Die nächste Zeile beschreibt den Autor dieses Commits mit Namen und E-Mail-Adresse.
Das vollständige Datum und die Uhrzeit des Commits folgen in der nächsten Zeile.
Schließlich wird der vollständige Inhalt der Commit-Nachricht angezeigt. Sie können fast alles andere, was git log bietet, mit Befehlszeilenoptionen steuern. Es gibt zwei Haupttypen von Optionen:
- Formatierung, die definiert, wie Git jeden Commit anzeigt.
- Filterung, die definiert, welche Commits git log enthält.
Zusätzlich zu Befehlszeilenoptionen akzeptiert git log Argumente, die Dateien, Commits, Branches oder andere Referenztypen angeben. Diese wenden eine weitere Filterung an.
Formatieren der Git-Log-Ausgabe
Eine der einfachsten Anpassungen ist die Option –oneline, die eine sehr kurze Ausgabe erzeugt:
git log --oneline
Jede Zeile im Protokoll enthält jetzt nur noch einen abgekürzten Commit-Hash und den Betreff der Commit-Nachricht . Dies ist eine hervorragende Möglichkeit, einen Überblick über die letzten Commits für das Projekt zu erhalten:
Leider sind diese Informationen ohne anderen Kontext nicht immer so nützlich. Es mag Ihnen ein vages Gefühl für das Projekt vermitteln, aber es fehlen Daten und andere nützliche Informationen über Autoren und Dateien.
Anzeigen eines Zweigdiagramms
Mit der Option –graph können Sie Beziehungen zwischen Zweigen visualisieren. Es ist sehr einfach, kann aber helfen, eine komplizierte Geschichte zu entwirren.
git log --oneline --graph
Angepasste hübsche Ausgabe
Sie können eine kompliziertere Formatierung erreichen, indem Sie sie mit der Option –pretty detailliert angeben . Die Syntax reicht von sehr einfach bis sehr viel komplexer, konsultieren Sie daher ein Handbuch für vollständige Details .
git log --pretty=short
Ist im Wesentlichen dasselbe wie git log ohne das Datum oder die vollständige Nachricht:
git log --pretty=oneline
Entspricht git log –oneline .
git log --pretty=fuller
Enthält viele Details. Es trennt sogar Autor und Committer, die theoretisch unterschiedliche Personen sein können:
Mit der format: -Variante können Sie einen String mit beliebigem Inhalt bereitstellen, einschließlich Platzhaltern, die durch verschiedene Daten ersetzt werden. Hier sind einige Beispiel-Platzhalter:
- %H Commit-Hash
- %h abgekürzter Commit-Hash
- %Anzeigen- Autorendatum
- %ar Autor Datum, relativ,
- %s Betreff der Commit-Nachricht
- %b Commit-Nachrichtentext
- %p abgekürzte Eltern-Hashes
Sie können der Ausgabe feste Zeichen hinzufügen und sie einfärben. Dieses Beispiel zeigt auch eine Variation des Datumsformats:
git log --pretty=format:'%C(auto) %h [%ad] %s' --date=short
Beachten Sie, dass das Datum in Klammern eingeschlossen ist. Welche Formatierung Sie auch wählen, wenn Sie möchten, dass die Ausgabe in einer Pipeline oder für andere Formen der Textverarbeitung nützlich ist, sollten Sie überlegen, wie Sie jeden Teil der Ausgabe abgrenzen.
Diffs im Log anzeigen
Ein wichtiges Detail bei der Betrachtung der Historie eines Repositorys sind die Diffs selbst. Sie repräsentieren schließlich, was sich im Code tatsächlich geändert hat! Für den Anfang können Sie mit –shortstat eine Zusammenfassung der Änderungen neben jedem Commit abrufen :
git log --shortstat
Dies fügt eine Zeile wie folgt hinzu:
1 file changed, 48 insertions(+), 2 deletions(-)
Am Ende jedes Commits. Sie werden diese Art von Zusammenfassung oft sehen – zum Beispiel auf allen Seiten von GitHub – und es ist eine nützliche Möglichkeit, den Umfang eines bestimmten Commits schnell zu beurteilen. Für detailliertere Informationen können Sie die vollständige Patch-Ausgabe (Diffs) mit dem Flag -p einschließen:
git log -p
Git-Log-Ausgabe filtern
Unabhängig davon, welche Formatierung Sie anwenden, sehen Sie immer noch das vollständige Protokoll aller Commits im aktuellen Branch. Auch wenn Git sie in Seiten aufteilt, kann dies immer noch eine Menge Ausgabe sein. Mit den folgenden Optionen können Sie anpassen, welche Commits das Protokoll enthält.
Einschränkung nach Betrag
Wenn Sie nur die Ergebnisse trimmen möchten, um die letzten paar Commits anzuzeigen, verwenden Sie die -[Zahl] -Syntax:
git log -2
Einschränkung nach Datum
Um die Menge der Commits auf einen bestimmten Datumsbereich einzuschränken , verwenden Sie die Optionen –since ( –after ) und –until ( –before ). Diese nehmen jeweils ein Datum im ISO 8601-Format an. Sie können entweder –since oder –until allein oder beide zusammen verwenden, um einen Bereich anzugeben. Die Optionen –after und –before sind Synonyme.
git log --since="2021-01-01" --until="2021-05-01"
Einschränken nach Datei
Git log kann sich auf eine bestimmte Datei konzentrieren und nicht auf jede Datei in Ihrem Repository. Dies ist ideal, um herauszufinden, wie sich eine bestimmte Datei im Laufe der Zeit verändert hat. Fügen Sie einfach den Dateinamen an das Ende Ihres git-Befehls an:
git log filename
Sie sehen nur die Commits, die den Dateinamen beeinflusst haben .
Unterschiede zwischen den Filialen
Möglicherweise haben Sie beim Anzeigen des Protokolls einer Verzweigung einige spezielle Anforderungen. Anstatt beispielsweise den gesamten Verlauf anzuzeigen, möchten Sie vielleicht nur sehen, was sich in diesem bestimmten Zweig geändert hat. Git-Log kann über die ref1..ref2- Syntax helfen. Es gibt drei leicht unterschiedliche Ansätze, die Sie verwenden können:
- Commits anzeigen, die sich im Haupt-, aber nicht im Branch befinden:
git log --oneline origin/branch..origin/main
- Commits anzeigen, die sich im Branch, aber nicht im Main befinden:
git log --oneline origin/ main ..origin/ branch
- Commits anzeigen, die nur in Branch oder Main vorhanden sind:
git log --oneline origin/branch ... origin/main
Unterschiede zwischen zwei Tags
So wie Sie den Verlauf zwischen Zweigen mit der Syntax ref1..ref2 anzeigen können , können Sie auch den Verlauf zwischen Tags auf dieselbe Weise anzeigen. Schließlich sind sowohl Tags als auch Verzweigungen Referenztypen.
git log --abbrev-commit --pretty=format:'%h %ar %s' v2.32.0-rc3..v2.32.0
Verwandte Befehle
Wenn Sie Versionshinweise für ein größeres Projekt vorbereiten, sollte git shortlog Ihre erste Anlaufstelle sein. Es erstellt eine Liste von Autoren mit Commit-Themen daneben. Sie können ihm einen Referenzbereich übergeben, um den Verlauf ähnlich wie bei git log einzuschränken:
git shortlog v2.32.0-rc3..v2.32.0
Der Befehl git show ist noch vielseitiger als git log . Es kann mit Tags und anderen Arten von Git-Objekten über den Commit-Verlauf hinaus arbeiten. Es teilt viele Optionen mit git log , aber Sie werden es nur wirklich brauchen, wenn Sie sich in Details auf niedrigerer Ebene vertiefen müssen.
Überprüfen Sie die Vergangenheit mit Git Log
Git log ist ein komplizierter Befehl, aber Sie können aus seinen grundlegendsten Optionen viel Nutzen ziehen. Das Durchsuchen des Verlaufs eines Repositorys ist eine hervorragende Möglichkeit, um zu verstehen, wie oft Änderungen auftreten und wie viele Personen sie vornehmen. Wenn Sie die Geschichte eines Projekts gut verstehen, können Sie selbst dazu beitragen.