Dapatkan semua git commit sejak tag terakhir

126

Saat saya akan menandai komit, saya perlu tahu apa yang berubah sejak komit terakhir yang diberi tag. Misalnya:

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

Dalam contoh ini saya ingin tahu tentang 3 komit terbaru, atau bisa mencetak log seperti di atas, yang menunjukkan kedua komit jika ada. Dan ketika saya melihat ada fitur baru yang ditambahkan, saya akan menandainya v1.5.0.

Bagaimana Anda menangani ini? Apakah ini cara saya menggunakan tag? Apa yang harus saya tulis di pesan tag? Saya selalu membiarkannya kosong:git tag -a v1.2.3 -m ''

ChocoDeveloper
sumber

Jawaban:

224

git log <yourlasttag>..HEAD ?

Jika Anda ingin mereka seperti dalam contoh Anda, pada satu baris dengan commit id + message, maka

git log <yourlasttag>..HEAD --oneline

dan jika Anda tidak tahu tag terbaru Anda atau ingin ini dinamis, di windows Anda bisa melakukannya

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

dan di linux / git bash / windows bash

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

Selain itu, jika Anda memiliki kasus di mana Anda mengetahui tag dalam riwayat dan ingin mencetak semuanya dari tag itu hingga situasi saat ini, Anda mungkin ingin menambahkan juga --decoratesehingga akan mencetak semua tag di antaranya.

eis
sumber
Apakah ada cara untuk melewati komit gabungan?
Holloway
@Trengot tidak tahu, belum memeriksanya. IMO merge commits adalah sesuatu yang harus dihindari, saya menggunakan rebasing jika memungkinkan.
eis
Versi linux juga berfungsi pada Git untuk Windows Bash
kwesolowski
Bukankah seharusnya <yourlasttag>+1?
Raffi Khatchadourian
@RaffiKhatchadourian jika Anda melakukannya, Anda akan melewatkan perubahan yang dilakukan dalam commit <yourlasttag>+ 1 dan Anda hanya akan mendapatkan perubahan setelah itu
eis
39

Jika komit Anda saat ini juga merupakan sebuah tag dan Anda ingin mendapatkan perubahan secara dinamis sejak tag sebelumnya, tanpa mengetahui tag terbaru atau nama tag sebelumnya, Anda dapat melakukan:

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

Perhatikan bahwa @kependekan dari HEAD.

mediafreakch
sumber
bagus !, jika hanya ingin melakukan perubahan teks --oneline ke --pretty = format: "% s": git log --pretty = format: "% s" $ (git description --tags --abbrev = 0 @ ^) .. @
JBarbosa