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.