488 Stimmen

Wie kann man die erste Übergabe mit "git log" anzeigen?

Ich habe ein Git-Projekt, das eine lange Geschichte hat. Ich möchte den ersten Commit anzeigen.

Wie kann ich das tun?

681voto

Nyambaa Punkte 34911

Das habe ich gefunden:

git log --reverse

zeigt Commits von Anfang an.

426voto

Chris Johnsen Punkte 199970

Kurze Antwort

git rev-list --max-parents=0 HEAD

(aus <a href="https://stackoverflow.com/questions/5188914/how-to-show-first-commit-by-git-log#comment19763574_5189296" title="tiho's comment">Kommentar von tiho </a>. Als <a href="https://stackoverflow.com/questions/5188914/how-to-show-first-commit-by-git-log#comment19774504_5189296" title="Chris Johnsen's remark">Chris Johnsen merkt an </a>, <code>--max-parents</code> wurde eingeführt, nachdem diese Antwort veröffentlicht wurde).

Erläuterung

Technisch gesehen, kann es mehr als eine Root Commit geben. Dies geschieht, wenn mehrere zuvor unabhängige Historien zusammengeführt werden. Es ist üblich, wenn ein Projekt über eine Teilbaum-Zusammenführung .

Le site git.git Repository hat sechs Root-Commits in seinem Verlaufsgraphen (jeweils eine für Linus' ersten Commit, gitk einige ursprünglich separate Werkzeuge, git-gui , gitweb et Git-P4 ). In diesem Fall wissen wir, dass e83c516 ist diejenige, an der wir wahrscheinlich interessiert sind. Es ist sowohl der früheste Commit als auch ein Root-Commit.

Im allgemeinen Fall ist das nicht so einfach.

Stellen Sie sich das vor libfoo befindet sich seit einiger Zeit in der Entwicklung und speichert seine Geschichte in einem Git-Repository ( libfoo.git ). Unabhängig davon wurde auch das Projekt "bar" entwickelt (in bar.git ), aber nicht so lange libfoo (die Übergabe mit dem frühesten Datum in libfoo.git ein Datum hat, das vor der Übergabe mit dem frühesten Datum in bar.git ). Irgendwann beschließen die Entwickler von "bar", Folgendes einzubauen libfoo in ihr Projekt einfügen, indem sie einen Teilbaum zusammenführen. Vor dieser Zusammenführung wäre es trivial gewesen, den "ersten" Commit in bar.git (wahrscheinlich gab es nur eine Root-Übertragung). Nach der Zusammenführung gibt es jedoch mehrere Root-Commits und der früheste Root-Commit stammt tatsächlich aus der Geschichte von libfoo und nicht "bar".

Sie können alle Root-Commits der History-DAG wie folgt finden:

git rev-list --max-parents=0 HEAD

Für das Protokoll: Wenn --max-parents nicht verfügbar waren, funktioniert dies auch:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

Wenn Sie über nützliche Tags verfügen, dann git name-rev können Sie sich einen schnellen Überblick über die Geschichte verschaffen:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin

Bonus

Benutzen Sie das oft? Schwer zu merken? Fügen Sie einen Git-Alias für schnellen Zugriff hinzu

git config --global alias.first "rev-list --max-parents=0 HEAD"

Jetzt können Sie einfach tun

git first

63voto

Mohamed Mansour Punkte 38017

Sie können Ihr Protokoll einfach umkehren und nur das erste Ergebnis anführen.

git log --pretty=oneline --reverse | head -1

29voto

Gabriel Staples Punkte 20228

Zu sehen nur den Commit-Hash des ersten Commits:

git rev-list --max-parents=0 HEAD 

Zu sehen die vollständige git log mit der Commit-Nachricht, nur für die erste Übergabe:

git log $(git rev-list --max-parents=0 HEAD)

Zu sehen tous git log Nachrichten in umgekehrter Reihenfolge vom ersten Commit am Anfang (statt am Ende) bis zum letzten (jüngsten) Commit am Ende (statt am Anfang):

git log --reverse

Referenzen:

  1. Wie ich den ersten Befehl oben gelernt habe: [die akzeptierte Antwort] Wie zeigt man die erste Übergabe mit 'git log' an? (der 2. Befehl oben war mein eigener Beitrag)
  2. Ich lernte über git log --reverse aus der am meisten geteilten Antwort, von @Nyambaa

17voto

Matthew Flaschen Punkte 266507
git log $(git log --pretty=format:%H|tail -1)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X