Pobierz wszystkie zatwierdzenia git od ostatniego tagu

127

Kiedy zamierzam oznaczyć zatwierdzenie tagiem, muszę wiedzieć, co zmieniło się od ostatniego oznaczonego zatwierdzenia. Na przykład:

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

W tym przykładzie chciałbym wiedzieć o 3 najnowszych zatwierdzeniach lub móc wydrukować dziennik podobny do powyższego, który pokazuje oba zatwierdzone tagi, jeśli takie istnieją. A kiedy zobaczę, że została dodana nowa funkcja, oznaczyłbym ją jako wersję 1.5.0.

Jak sobie z tym radzisz? Czy w ten sposób mam używać tagów? Co mam napisać w wiadomości z tagiem? Zawsze zostawiam to puste:git tag -a v1.2.3 -m ''

ChocoDeveloper
źródło

Odpowiedzi:

226

git log <yourlasttag>..HEAD ?

Jeśli chcesz, żeby były jak w twoim przykładzie, w jednej linii z komunikatem commita id +, to

git log <yourlasttag>..HEAD --oneline

a jeśli nie znasz swojego najnowszego znacznika lub chcesz, aby był on dynamiczny, w systemie Windows możesz to zrobić

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

i na linux / git bash / windows bash

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

Ponadto, jeśli masz przypadek, w którym znasz tag w historii i chcesz wydrukować wszystko, od tego tagu do bieżącej sytuacji, możesz chcieć dodać również, --decorateaby wydrukować wszystkie tagi pomiędzy.

eis
źródło
Czy jest jakiś sposób na pominięcie zatwierdzeń scalających?
Holloway
@Trengot nie wiem, nie zaglądałem do tego. Zresztą zatwierdzenia scalania IMO są czymś, czego należy unikać, zamiast tego używam ponownego bazowania, gdy tylko jest to możliwe.
eis
Wersja
linuxowa
Czy nie powinien to być <yourlasttag>+1?
Raffi Khatchadourian
@RaffiKhatchadourian, jeśli to zrobisz, przegapisz zmiany wprowadzone w zatwierdzeniu <yourlasttag>+ 1, a zmiany otrzymasz dopiero po tym
eis
40

Jeśli twoje obecne zatwierdzenie jest również znacznikiem i chcesz dynamicznie pobierać zmiany od poprzedniego znacznika, nie znając najnowszego znacznika ani nazwy poprzedniego znacznika, możesz:

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

Zauważ, że @jest to skrót od HEAD.

mediafreakch
źródło
fajnie !, jeśli tylko chcesz zmienić tekst zatwierdzeń --oneline na --pretty = format: "% s": git log --pretty = format: "% s" $ (git opisać --tags --abbrev = 0 @ ^) .. @
JBarbosa