Obter todas as confirmações do git desde a última tag

126

Quando vou marcar um commit, preciso saber o que mudou desde o último commit marcado. Por exemplo:

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

Neste exemplo, eu gostaria de saber sobre as três confirmações mais recentes ou poder imprimir um log como acima, que mostra as duas confirmações de tags, se houver. E quando vejo que um novo recurso foi adicionado, eu o rotularia como v1.5.0.

Como você lida com isso? É assim que eu devo usar tags? O que devo escrever na mensagem de marca? Eu sempre deixo em branco:git tag -a v1.2.3 -m ''

ChocoDeveloper
fonte

Respostas:

224

git log <yourlasttag>..HEAD ?

Se você desejar como no seu exemplo, em uma linha com commit id + message,

git log <yourlasttag>..HEAD --oneline

e, caso você não saiba sua tag mais recente ou queira que ela seja dinâmica, no Windows, você poderá

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

e no linux / git bash / windows bash

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

Além disso, se você tem um caso em que conhece uma marca no histórico e deseja imprimir tudo, desde a marca até a situação atual, você pode adicionar também --decoratepara que ela imprima qualquer marca no meio.

eis
fonte
Existe alguma maneira de ignorar confirmações de mesclagem?
Holloway
@Trengot não sabe, não investiguei isso. As confirmações de mesclagem da IMO são algo a evitar, de qualquer maneira, eu uso rebasing sempre que possível.
eis
A versão Linux também funciona em Git para Windows Bash
kwesolowski
Não deveria ser <yourlasttag>+ 1?
Raffi Khatchadourian
@RaffiKhatchadourian, se você fizer isso, perderá as alterações feitas no commit <yourlasttag>+ 1 e só obterá alterações depois disso
eis
39

Se o commit atual também for uma tag e você desejar obter as alterações dinamicamente desde a tag anterior, sem saber a tag mais recente nem o nome da tag anterior, você poderá:

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

Observe que @é a abreviação de HEAD.

mediafreakch
fonte
legal !, se você quiser apenas confirmar o texto, mude --online para --pretty = formato: "% s": log do git --pretty = formato: "% s" $ (git descreve --tags --abbrev = 0 @ ^) .. @
JBarbosa