Ich habe ein Projekt, das eine lange Geschichte hat. Ich möchte das erste Commit für Git zeigen.
Wie mache ich das?
Ich habe ein Projekt, das eine lange Geschichte hat. Ich möchte das erste Commit für Git zeigen.
Wie mache ich das?
Antworten:
git rev-list --max-parents=0 HEAD
(Aus Tihos Kommentar . Wie Chris Johnsen bemerkt , --max-parentswurde er eingeführt, nachdem diese Antwort veröffentlicht wurde.)
Technisch gesehen kann es mehr als ein Root-Commit geben. Dies geschieht, wenn mehrere zuvor unabhängige Historien zusammengeführt werden. Es ist üblich, wenn ein Projekt über eine Teilbaumzusammenführung integriert wird .
Das git.gitRepository enthält sechs Root-Commits in seinem Verlaufsdiagramm (jeweils eines für Linus 'anfängliches Commit, gitk , einige anfänglich separate Tools, git-gui , gitweb und git-p4 ). In diesem Fall wissen wir, dass dies das e83c516ist, an dem wir wahrscheinlich interessiert sind. Es ist sowohl das früheste Commit als auch ein Root-Commit.
Im allgemeinen Fall ist das nicht so einfach.
Stellen Sie sich vor, libfoo befindet sich seit einiger Zeit in der Entwicklung und speichert seinen Verlauf in einem Git-Repository ( libfoo.git). Unabhängig davon befindet sich das "Bar" -Projekt ebenfalls in der Entwicklung (in bar.git), jedoch nicht so lange libfoo (das Commit mit dem frühesten Datum in libfoo.githat ein Datum, das dem Commit mit dem frühesten Datum in vorausgeht bar.git). Irgendwann beschließen die Entwickler von "bar", libfoo mithilfe einer Teilbaumzusammenführung in ihr Projekt aufzunehmen. Vor dieser Zusammenführung war es möglicherweise trivial, das „erste“ Festschreiben zu bestimmen bar.git(es gab wahrscheinlich nur ein Root-Festschreiben). Nach dem Zusammenführen gibt es jedoch mehrere Root-Commits, und das früheste Root-Commit stammt tatsächlich aus der Geschichte von libfoo, nicht "Bar".
Sie finden alle Root-Commits der History-DAG folgendermaßen:
git rev-list --max-parents=0 HEAD
Wenn dies --max-parentsnicht verfügbar ist, funktioniert dies auch:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Wenn Sie nützliche Tags eingerichtet haben, erhalten Sie git name-revmöglicherweise einen schnellen Überblick über den Verlauf:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
Oft benutzen? Schwer zu merken? Fügen Sie einen Git-Alias für den schnellen Zugriff hinzu
git config --global alias.first "rev-list --max-parents=0 HEAD"
Jetzt können Sie einfach tun
git first
git rev-list --max-parents=0 HEADwird das Gleiche tun und ist ein bisschen einfacher.
Ich habe das gefunden:
git log --reverse
zeigt Commits von Anfang an.
git log --reverse -5lässt es das --reverseaus irgendeinem Grund ignorieren
Sie können Ihr Protokoll einfach umkehren und das erste Ergebnis anzeigen.
git log --pretty=oneline --reverse | head -1
git log --reversekehrt den Verlauf um, sodass Sie head -1statt verwenden müssen tail -1, um das erste Commit zu erhalten.
-nFlagge nicht ignorieren würde, wenn sie --reversegegeben wird.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1gibt Ihnen den Commit-Hash (dh 0dd89fb), den Sie in andere Befehle einspeisen können, indem Sie so etwas tun
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD um alle Commits am letzten Tag anzuzeigen.
git log -1.