Obtener todas las confirmaciones de git desde la última etiqueta

126

Cuando voy a etiquetar una confirmación, necesito saber qué cambió desde la última confirmación etiquetada. P.ej:

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

En este ejemplo, me gustaría saber sobre las 3 confirmaciones más recientes, o poder imprimir un registro como el anterior, que muestre que ambas confirmaciones tienen sus etiquetas, si las hay. Y cuando veo que se ha agregado una nueva función, la etiquetaría como v1.5.0.

Como tratas con esto? ¿Es así como se supone que debo usar las etiquetas? ¿Qué debo escribir en el mensaje de la etiqueta? Siempre lo dejo en blanco:git tag -a v1.2.3 -m ''

ChocoDesarrollador
fuente

Respuestas:

224

git log <yourlasttag>..HEAD ?

Si los quiere como en su ejemplo, en una línea con id de confirmación + mensaje, entonces

git log <yourlasttag>..HEAD --oneline

y en caso de que no conozca su última etiqueta o desee que sea dinámica, en Windows puede hacerlo

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

y en linux / git bash / windows bash

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

Además, si tiene un caso en el que conoce una etiqueta en el historial y desea imprimir todo, desde esa etiqueta hasta la situación actual, es posible que desee agregar también --decoratepara que imprima las etiquetas intermedias.

eis
fuente
¿Hay alguna forma de que esto omita las confirmaciones de fusión?
Holloway
@Trengot no lo sé, no lo he investigado. Las confirmaciones de fusión de la OMI son algo que se debe evitar de todos modos, utilizo rebase en su lugar siempre que sea posible.
Eis
La versión de Linux también funciona en Git para Windows Bash
kwesolowski
¿No debería ser <yourlasttag>+1?
Raffi Khatchadourian
@RaffiKhatchadourian si hicieras eso, te perderías los cambios realizados en la confirmación <yourlasttag>+ 1 y solo obtendrías cambios después de eso
eis
39

Si su confirmación actual también es una etiqueta y desea obtener dinámicamente los cambios desde la etiqueta anterior, sin conocer la última etiqueta ni el nombre de la etiqueta anterior, puede hacer:

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

Tenga en cuenta que @es la abreviatura de HEAD.

mediafreakch
fuente
¡agradable !, si solo desea que el texto de confirmación cambie --en línea a --pretty = formato: "% s": git log --pretty = formato: "% s" $ (git describe --tags --abbrev = 0 @ ^) .. @
JBarbosa