Wie zeige ich den ersten Commit von ‘git log’ an?

Lesezeit: 5 Minuten

Benutzer-Avatar
Nambaa

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

Wie mache ich das?

  • Ich habe nur einen Weg gefunden, das letzte zu zeigen git log -1.

    – Alex

    4. März 2011 um 2:17 Uhr

  • mögliches Duplikat von git: Wie verweise ich auf das anfängliche Commit?

    – Chris Johnsen

    4. März 2011 um 3:33 Uhr

Benutzer-Avatar
Nambaa

Ich habe das gefunden:

git log --reverse

zeigt Commits von Anfang an.

  • interessant git log --reverse -5 macht es ignorieren --reverse aus irgendeinem Grund

    – Dan2552

    15. Juli 2013 um 17:51 Uhr

  • @Dan2552 Sieht aus wie ein Fehler, sollte gemeldet werden?

    – saeedgnu

    23. August 2013 um 6:50 Uhr

  • sieht so aus, als ob es zuerst die Ergebnisse auf 5 Einträge begrenzt und dann umkehrt

    – Nichtpolarität

    21. April 2014 um 23:39 Uhr


  • @太極者無極而生 hat Recht, das ist das dokumentierte Verhalten.

    – seriöser Entwickler

    12. März 2016 um 17:31 Uhr

  • Dies gibt alle Commits aus, auf die zugegriffen werden kann HEAD in umgekehrter Reihenfolge ist die akzeptierte Antwort anspruchsvoller

    – CervEd

    31. Mai 2021 um 12:33 Uhr

Benutzer-Avatar
Chris Johnsen

Kurze Antwort

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

(aus tihos Kommentar. Wie Chris Johnsen bemerkt, --max-parents wurde eingeführt, nachdem diese Antwort veröffentlicht wurde.)

Erläuterung

Technisch gesehen kann es mehr als einen Root-Commit geben. Dies geschieht, wenn mehrere zuvor unabhängige Historien zusammengeführt werden. Es ist üblich, dass ein Projekt über a integriert wird Teilbaum zusammenführen.

Das git.git Das Repository hat sechs Root-Commits in seinem Verlaufsdiagramm (jeweils einen für Linus’ anfänglichen Commit, gitkeinige anfänglich getrennte Werkzeuge, git-gui, gitwebund git-p4). In diesem Fall wissen wir das e83c516 ist derjenige, an dem wir wahrscheinlich interessiert sind. Es ist sowohl der früheste Commit als auch ein Root-Commit.

Das ist im allgemeinen Fall nicht so einfach.

Stell dir das vor libfoo befindet sich seit einiger Zeit in der Entwicklung und bewahrt seine Historie in einem Git-Repository auf (libfoo.git). Unabhängig davon wurde auch das Projekt „Bar“ entwickelt (in bar.git), aber nicht so lange libfoo (Der Commit mit dem frühesten Datum in libfoo.git hat ein Datum, das vor dem Commit mit dem frühesten Datum liegt bar.git). Irgendwann entscheiden sich die Entwickler von „Bar“ für eine Einarbeitung libfoo in ihr Projekt, indem sie eine Teilbaumzusammenführung verwenden. Vor dieser Zusammenführung war es möglicherweise trivial, den „ersten“ Commit in zu bestimmen bar.git (es gab wahrscheinlich nur einen Root-Commit). Nach der Zusammenführung gibt es jedoch mehrere Root-Commits, und der früheste Root-Commit stammt tatsächlich aus der Historie von libfoonicht „Balken“.

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

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

Fürs Protokoll, wenn --max-parents nicht verfügbar waren, funktioniert dies auch:

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

Wenn Sie nützliche Tags haben, dann git name-rev kann Ihnen einen schnellen Überblick über die Geschichte geben:

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

Bonus

Verwenden Sie dies oft? 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

  • Ich glaube git rev-list --max-parents=0 HEAD wird das gleiche tun, und ist ein bisschen einfacher.

    – tiho

    9. Januar 2013 um 18:33 Uhr

  • @tiho: Ja, es macht dasselbe und ist einfacher; obwohl diese Option nicht ganz gewesen war “erfunden” zum Zeitpunkt dieser Frage/Antwort.

    – Chris Johnsen

    10. Januar 2013 um 2:28 Uhr


  • Mir fällt auf, dass der erste Commit eher ein ist Blatt begehen als a Wurzel begehen

    – zwei

    6. Februar 2013 um 3:27 Uhr

  • @tiho Ich denke, Ihre Antwort sollte eine eigene Antwort sein und nicht nur ein Kommentar. Auf diese Weise wird es prominenter und Sie erhalten wohlverdiente Punkte.

    – Russel Silva

    23. September 2014 um 15:38 Uhr

  • @RussellSilva Punkte sind mir egal, aber ich glaube, es ist möglich, die Antworten anderer Leute zu bearbeiten, was wahrscheinlich besser wäre, als eine neue hinzuzufügen. Ich fühle mich nicht wirklich wohl dabei, es selbst zu tun, fühl dich frei, es zu tun 🙂

    – tiho

    17. November 2014 um 21:19 Uhr

Benutzer-Avatar
Mohammed Mansur

Sie können Ihr Protokoll einfach umkehren und es auf das erste Ergebnis ansteuern.

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

  • git log --reverse kehrt die Geschichte um, also müssen Sie verwenden head -1 anstatt tail -1 um das erste Commit zu erhalten.

    – rubiii

    8. September 2011 um 16:54 Uhr


  • es wäre am besten, wenn Git die nicht ignorieren würde -n Flagge wann --reverse gegeben ist.

    – Friedrich Nord

    3. Februar 2015 um 15:33 Uhr

  • --pretty=oneline ist nicht wirklich hübsch, verwenden --oneline um zu vermeiden, dass die gesamte SH1-Prüfsumme gedruckt wird.

    – Sebastian Nielsen

    10. Februar 2021 um 21:52 Uhr

git log $(git log --pretty=format:%H|tail -1)

Benutzer-Avatar
Gabriel Staples

Um zu sehen nur der Commit-Hash des ersten Commits:

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

Um zu sehen das volle git logmit Commit-Nachricht, nur für den ersten Commit:

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

Um zu sehen alles git log Nachrichten in umgekehrter Reihenfolgevom ersten Commit ganz oben (statt ganz unten) bis zum letzten (jüngsten) Commit ganz unten (statt ganz oben):

git log --reverse

Verweise:

  1. Wie ich den ersten Befehl oben gelernt habe: [the accepted answer] Wie zeige ich den ersten Commit von ‘git log’ an? (der 2. Befehl oben war mein eigener Beitrag)
  2. Ich lernte darüber git log --reverse aus der am meisten positiv bewerteten Antwort von @Nyambaa

Benutzer-Avatar
MHC

Nicht die schönste Art, es zu tun, denke ich:

git log --pretty=oneline | wc -l

Das gibt dir dann eine Nummer

git log HEAD~<The number minus one>

Benutzer-Avatar
TankorSmash

git log --format="%h" | tail -1 gibt Ihnen den Commit-Hash (dh 0dd89fb), die 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 des letzten Tages anzuzeigen.

1014810cookie-checkWie zeige ich den ersten Commit von ‘git log’ an?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy