Holen Sie sich alle Git-Commits seit dem letzten Tag

126

Wenn ich ein Commit markieren möchte, muss ich wissen, was sich seit dem letzten getaggten Commit geändert hat. Z.B:

a87a6sdf87a6d4 Some new feature
a87a6sdf87a6d3 Some bug fix
a87a6sdf87a6d2 Some comments added
a87a6sdf87a6d1 Some merge <- v1.4.0

In diesem Beispiel möchte ich die 3 neuesten Commits kennenlernen oder ein Protokoll wie oben drucken können, in dem beide Commits ihre Tags anzeigen, falls vorhanden. Und wenn ich sehe, dass eine neue Funktion hinzugefügt wurde, würde ich sie als v1.5.0 markieren.

Wie gehst du damit um? Soll ich so Tags verwenden? Was soll ich in die Tag-Nachricht schreiben? Ich lasse es immer leer:git tag -a v1.2.3 -m ''

ChocoDeveloper
quelle

Antworten:

222

git log <yourlasttag>..HEAD ?

Wenn Sie möchten, dass sie wie in Ihrem Beispiel in der einen Zeile mit Commit-ID + Nachricht angezeigt werden, dann

git log <yourlasttag>..HEAD --oneline

und falls Sie Ihr aktuelles Tag nicht kennen oder möchten, dass es dynamisch ist, können Sie dies unter Windows tun

for /f "delims=" %a in ('git describe --tags --abbrev^=0') do @set latesttag=%a
git log %latesttag%..HEAD --oneline

und unter Linux / Git Bash / Windows Bash

git log $(git describe --tags --abbrev=0)..HEAD --oneline

Wenn Sie einen Fall haben, in dem Sie ein Tag im Verlauf kennen und alles von diesem Tag bis zur aktuellen Situation --decoratedrucken möchten, möchten Sie möglicherweise auch hinzufügen, damit alle dazwischen liegenden Tags ausgedruckt werden.

eis
quelle
Gibt es eine Möglichkeit, Merge-Commits zu überspringen?
Holloway
@Trengot weiß nicht, habe das nicht untersucht. IMO-Merge-Commits sollten sowieso vermieden werden. Ich verwende stattdessen, wann immer möglich, eine Neubasierung.
Eis
Die Linux-Version funktioniert auch auf Git für Windows Bash
kwesolowski
Sollte es nicht <yourlasttag>+ 1 sein?
Raffi Khatchadourian
@ RaffiKhatchadourian Wenn Sie das tun würden, würden Sie die Änderungen in Commit <yourlasttag>+ 1 verpassen und Sie würden erst danach Änderungen erhalten
eis
39

Wenn Ihr aktuelles Commit auch ein Tag ist und Sie die Änderungen seit dem vorherigen Tag dynamisch abrufen möchten, ohne das neueste Tag oder den vorherigen Tag-Namen zu kennen, können Sie Folgendes tun:

git log --oneline $(git describe --tags --abbrev=0 @^)..@

Beachten Sie, dass @die Abkürzung für HEAD.

Medienfreakch
quelle
nice!, wenn nur der Commit-Text geändert werden soll --oneline in --pretty = format: "% s": git log --pretty = format: "% s" $ (git description --tags --abbrev = 0 @ ^) .. @
JBarbosa