Ich habe ein Git-Projekt, das eine lange Geschichte hat. Ich möchte den ersten Commit anzeigen.
Wie kann ich das tun?
Ich habe ein Git-Projekt, das eine lange Geschichte hat. Ich möchte den ersten Commit anzeigen.
Wie kann ich das tun?
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).
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
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
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
git log --reverse
aus der am meisten geteilten Antwort, von @Nyambaa 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.