Ottieni tutti i commit di git dall'ultimo tag


126

Quando taggerò un commit, ho bisogno di sapere cosa è cambiato dall'ultimo commit taggato. Per esempio:

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

In questo esempio mi piacerebbe conoscere i 3 commit più recenti, o essere in grado di stampare un log come sopra, che mostra entrambi i commit, se ce ne sono. E quando vedo che è stata aggiunta una nuova funzionalità, la taggerò v1.5.0.

come lo gestisci? È così che dovrei usare i tag? Cosa devo scrivere nel messaggio del tag? Lo lascio sempre vuoto:git tag -a v1.2.3 -m ''

Risposte:


224

git log <yourlasttag>..HEAD ?

Se li vuoi come nel tuo esempio, su una riga con commit id + messaggio, allora

git log <yourlasttag>..HEAD --oneline

e nel caso in cui non conosci il tuo ultimo tag o desideri che sia dinamico, su Windows potresti farlo

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

e su linux / git bash / windows bash

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

Inoltre, se hai un caso in cui conosci un tag nella cronologia e vuoi stampare tutto da quel tag fino alla situazione attuale, potresti voler aggiungere anche in --decoratemodo che stampi tutti i tag nel mezzo.


C'è un modo per saltare i commit di unione?
Holloway

@Trengot non lo so, non l'ho esaminato. I commit di unione IMO sono comunque qualcosa da evitare, uso invece il rebasing quando possibile.
eis

La versione per Linux funziona anche su Git per Windows Bash
kwesolowski

Non dovrebbe essere <yourlasttag>+1?
Raffi Khatchadourian

@RaffiKhatchadourian se lo facessi, perderesti le modifiche apportate al commit <yourlasttag>+ 1 e riceverai le modifiche solo dopo
eis

39

Se il commit corrente è anche un tag e desideri ottenere dinamicamente le modifiche dal tag precedente, senza conoscere il tag più recente né il nome del tag precedente, puoi fare:

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

Nota che @è l'abbreviazione di HEAD.


bello !, se vuoi solo che il testo dei commit cambi da --oneline a --pretty = format: "% s": git log --pretty = format: "% s" $ (git descrive --tags --abbrev = 0 @ ^) .. @
JBarbosa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.