logge die ersten 10 in git ein

88

Zwei Fragen:

  1. Wie man die ersten 10 Commits in Git von Anfang bis Ende zeigt. (kein Zweig)
  2. Wie die den Commit-Index angeben und protokollieren. (zeige den zweiten oder dritten)

Ich weiß, dass Git Eltern verwenden, um das Commit zu verknüpfen. Es ist einfach, das Commit von Ende zu Anfang zu protokollieren. mögen:git log HEAD~10

Aber ich muss von Anfang bis Ende abfragen, ist es möglich?

Yohan Zhou
quelle
Scrollen Sie zu @kostix Antwort
Muhammad Umer

Antworten:

60

Protokollieren Sie einfach alles mit einem Zeilenformat und beenden Sie die Ausgabe:

git log  --pretty=oneline | tail -n 10 
CharlesB
quelle
Toll! Das ist es, wonach ich suche. Tks @CharlesB.
Yohan Zhou
3
Oder verwenden Sie git rev-list HEAD | tail -n 10, um die 10 IDs aufzulisten, die Sie dann in einem beliebigen Format anzeigen können (nicht auf die einzeilige Methode beschränkt).
Torek
15
tailscheint die schöne Farbe zu verlieren, die ich in meiner Git-Konsole bekomme. Das Übergeben eines Parameters wie git log --oneline -10in der anderen Antwort funktioniert wie erwartet.
James Hulse
4
Dies ist eindeutig der Hardcore-Unix-Weg, lol. Bitte siehe @kostix Antwort.
9301293
1
Der Nachteil dieser Methode ist, dass ich nur meine Push-Commits sehen kann.
Jack '
243
git log -10

Zeigt 10 letzte Commits an, die mit der Revisionsspezifikation übereinstimmen (eine fehlende Spezifikation bedeutet "alle Commits").

Siehe Manpage:

git help log

Sektion Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.
kostix
quelle
5
einfach und hängt nicht davon ab tail, ob Sie auf Ihrer Plattform verfügbar sind.
Tenpn
8
& spielt nicht mit der Formatierung / Färbung von Git. Dies sollte die akzeptierte Antwort sein x100
kuzyn
10
Nicht das, was der Op wollte: Er wollte die first10, nicht die latest.
Timo
1
@ Timo, möglicherweise ja, aber die Frage, wie angegeben, ist offen für Interpretationen, und viele Leute scheinen meine Antwort nur wegen dieser offenen Unterschiede zu bewerten. Also, obwohl ich Ihnen technisch zustimme, lassen wir es wohl so, wie es ist ;-) Unter den technisch korrekten Vorschlägen gefällt mir der Kommentar des Torek zur akzeptierten Antwort am besten.
Kostix
@kostix "Wie man die ersten 10 Commits in Git von Anfang bis Ende zeigt" ist für mich nicht "offen für Interpretationen". Es wird offensichtlich nach den ersten 10 Commits gefragt , nicht nach den neuesten .
Bobby Jack
28

Hier mein Ansatz,

So erhalten Sie die ersten 10 Commits:

git log -n 10

-n ist die Nummer

Zusätzliche Um die nächsten 10 Festschreibungen zu erhalten, überspringen Sie die ersten 10:

git log --skip=10 -n 10
Nayagam
quelle
Ich denke, dies sollte die akzeptierte Antwort sein. Die Verwendung von Schwanz wird dazu führen, dass --graph nicht mehr in Git Log
Relief.melone funktioniert.
Dies muss die akzeptierte Antwort sein. funktioniert wie ein Zauber für mich
Doogle
Sie verlieren die Schriftfarbe auf der Konsole auch mit dem Schwanz. Dies ist die richtige Antwort
CESCO
14

So erhalten Sie die letzten 10 Commits:

git log HEAD~10..HEAD

Um sie in der ältesten bis neuesten Reihenfolge zu erhalten:

git log --reverse HEAD~10..HEAD

Beachten Sie, dass bei Zusammenführungen möglicherweise mehr als 10 Commits angezeigt werden. Hinzufügen, --first-parentwenn Sie nur das erste übergeordnete Element jedes Zweigs durchlaufen möchten.

Weitere Informationen finden Sie in der Dokumentation zu git rev-list.


Bearbeiten: Sie haben oben bereits eine nützliche Antwort erhalten, um "Commits kurz vor Beginn des Verlaufs anzuzeigen" (siehe auch die Vorbehalte zu mehreren nicht verbundenen Commit-DAGs in einem Repo). Sie können aber auch zB:

git log --no-walk `git rev-list HEAD | tail -n 10`

und:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

abhängig von der Reihenfolge, in der Sie die Ergebnisse erhalten möchten.

torek
quelle
Tks für Ihre Antwort. Aber ich brauche nicht die letzten 10 Commits, sondern die ersten. Um genau zu sein, wenn das Commit ABCDEFG (HEAD) ist. Wie protokolliere ich das ABC und wie protokolliere ich C anhand des Index 2?
Yohan Zhou
Oh! Es gibt keine Garantie dafür, dass es ein einzelnes "First Commit" gibt, aber wenn ja, siehe den Link @CharlesB hinzugefügt.
Torek
Der Weg kann Arbeit sein. irgendein natürlicher Weg? git log --pretty = oneline | wc -l git log HEAD ~ <Die Zahl minus eins oder Index>
yohan zhou
Danke für die Antwort. Dies ist, was ich brauchte, um '-10'-Stiloptionen in meinen Git-Aliasnamen zu vermeiden. die Zahlenargumente akzeptieren.
VicTROLLA
11

Das beste Ergebnis ergibt sich aus der Kombination der beiden besten Antworten:

git log --pretty=oneline -10
andrej
quelle
1
Vielen Dank, ich verwende dies als Git-Alias , um die letzten Commits schnell anzuzeigen, ohne mein Terminal zu füllen. Ich habe den Alias ​​genannt lkj = log --pretty=oneline --abbrev-commit -10. Jetzt ist mir klar, dass es die Frage des OP nicht beantwortet, aber ich bin hierher gekommen, um nach dem einfachen Nummernschalter zu suchen.
Paul Rougieux
4

Einfach alles umgekehrt protokollieren -1 bedeutet, ein Protokoll aufzulisten

git log  --reverse -1
Nickleefly
quelle
2

Ich würde unten einfache Syntax Befehl verwenden;

git log -10 --oneline
RAVI PATEL
quelle
1
Denken Sie, dies ist der effizienteste Weg!
Nishant
0

Weil ... mehr Details: p

  1. Wie man die ersten 10 Commits in Git von Anfang bis Ende zeigt. (kein Zweig)
  2. Wie die den Commit-Index angeben und protokollieren. (zeige den zweiten oder dritten)

Mit (kein Zweig) fragen Sie möglicherweise eher nach der reflogAhnenkette als nach einer bestimmten Ahnenkette. Das Folgende hat nichts mit dem Zweig zu tun, in dem Sie sich befinden.

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gist --walk-reflogsstattdessen die commit Ahnenkette zu Fuß, zu Fuß reflog entries.q
  • |cut -d ' ' -f 2|tr -d ':' > logFügen Sie hinzu , um nur den Reflog-Commit-Index zu protokollieren.

Im Folgenden werden die frühesten Vorfahren des aktuell ausgecheckten Zweigs angezeigt.

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Geben Sie die Commits in umgekehrter Reihenfolge aus.
  • Kann nicht einfach verwendet werden -n 10oder -10da es kaputt geht--reverse
  • cat -n fügt Zeilennummern hinzu (Commit-Index?)

Hier
quelle
0

Für den Fall, dass jemand mehr als nur ein einzeiliges Protokoll erstellen möchte:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

Dabei sollte 11am Ende 1mehr als die Anzahl der gewünschten Commits festgelegt werden.

Wie hier erwähnt , git log --reverse -n 10funktioniert es nicht so, wie Sie es brauchen. ( Ich nehme an, es muss nicht kommutativ sein, damit Sie die ersten 10 Commits in umgekehrter Reihenfolge oder die letzten 10 Commits auswählen können 🤪)

Cameron Stone
quelle