Ich habe ein Projekt, das eine lange Geschichte hat. Ich möchte den ersten Commit auf Git zeigen.
Wie mache ich das?
Nambaa
Ich habe ein Projekt, das eine lange Geschichte hat. Ich möchte den ersten Commit auf Git zeigen.
Wie mache ich das?
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
Chris Johnsen
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.)
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.
Die 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
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
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)
Gabriel Staples
Sehen nur der Commit-Hash des ersten Commits:
git rev-list --max-parents=0 HEAD
Sehen das volle git log
mit Commit-Nachricht, nur für den ersten Commit:
git log $(git rev-list --max-parents=0 HEAD)
Sehen alle 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
git log --reverse
aus der am meisten positiv bewerteten Antwort von @Nyambaa
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>
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.
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