Jawaban:
Untuk mendapatkan tag git dengan hash SHA1 dari objek Tag, Anda dapat menjalankan:
git show-ref --tags
Outputnya akan terlihat seperti ini:
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
Setiap baris adalah hash SHA1 dari tag, diikuti dengan nama tag yang diawali dengan refs/tags/
.
Jika Anda menginginkan hash SHA1 dari komit, sebagai ganti objek tag, Anda dapat menjalankan:
git show-ref --tags -d
Ini akan menghasilkan keluaran seperti:
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}
Baris yang diakhiri dengan ^{}
start dengan hash SHA1 dari commit aktual yang ditunjuk tag.
git show-ref --tags -d
. Tag yang berbeda diposkan dengan a ^{}
.
The git tag
perintah terbelakang. Banyak yang diinginkan tetapi hilang di dalamnya, seperti detail tag lengkap dan tag dalam urutan riwayat komit.
Saya suka ini sebaliknya, yang memberikan apa yang saya inginkan tetapi tidak dapat diperoleh dari git tag
:
git log --oneline --decorate --tags --no-walk
Ini memberikan tampilan kode warna yang sangat bagus dari tag dalam urutan kronologis terbalik (seperti yang akan terjadi di log lengkap). Dengan begitu, Anda tidak hanya melihat tag, Anda juga akan melihat hash yang disingkat dan pesan komit dari tag komit.
Saya telah mengaliinya dengan git t
dan git tags
sebagai berikut:
git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
Catatan: Saya harus menggunakan pengalihan bash karena git t
Git tidak mendukung pemanggilan alias dari alias lain (yang menyebalkan).
Jika Anda ingin melihat tanggal dan waktu commit, coba:
git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
Anda dapat menggunakan format tanggal lain dalam --date
opsi serta mengontrol sepenuhnya keluaran agar sesuai dengan selera unik Anda dalam --pretty
opsi tersebut. Kedua opsi tersebut didokumentasikan dengan baik di Dokumentasi git-log .
git log
sangat kuat! Anda dapat menampilkannya persis apa yang Anda inginkan. Coba git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. Format tanggal lain juga dimungkinkan. Lihat saja --date
di halaman bantuan. Saya telah memperbarui jawaban saya untuk menyertakan opsi ini.
--pretty
dan %H
. Terima kasih atas +1 :)
Tag beranotasi memiliki SHA − 1 sendiri, jadi kita perlu membedakannya. Namun tag ringan tidak dapat dirujuk, karena sudah mengarah ke komit. Untuk menyelesaikannya, kita harus mendaftar keduanya dan memfilter objek komit:
git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit
Hasil dengan tag ringan:
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
Hasil dengan tag beranotasi:
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
git log --tags --oneline --no-walk
juga akan membedakan tag beranotasi secara otomatis. :)
Untuk mendapatkan SHA1 yang dirujuk oleh segala jenis ref (cabang, tag ...) gunakan git rev-parse
:
git rev-parse tag1^0 tag2^0
Ini hanya akan mencetak SHA1 lengkap, pada baris terpisah. The ^0
akhiran adalah sintaks khusus, untuk memastikan bahwa ini akan mencetak SHA1 yang dari komit menunjuk ke oleh tag, apakah itu dijelaskan atau tidak. (Tag beranotasi adalah objek dengan sendirinya, yang berisi pointer ke komit bersama dengan metadata. Jika Anda tahu bahwa tag dianotasi, dan ingin tag SHA1, cukup tinggalkan ^0
.)
Tentu saja, Anda tidak perlu sering melakukan ini, karena perintah Git apa pun yang menerima SHA1 juga harus menerima tag!
Saya memiliki pertanyaan serupa, tetapi menginginkan hash dari (beberapa) tag tertentu. Saya menemukan bahwa "show-ref" akan mengambil daftar tag, jadi ini tugasnya:
% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
Namun, beberapa eksperimen dengan "git show" menghasilkan perintah ini:
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
Karena saya jauh lebih akrab dengan menggunakan "show" daripada "show-ref", saya merasa yang terakhir lebih mudah diingat dan lebih membantu juga.
Lihat juga ringkasan bagus di Bagaimana cara membedakan mana yang menunjuk ke tag di Git? .
Tag harus ditandatangani dan / atau dikirimi pesan. Tag ringan tidak memiliki objek SHA1 dan hanya referensi. Kalau tidak coba git show
.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
Ini memberikan daftar semua komit untuk tag. Tag beranotasi berbeda. Kirimkan terima kasih di sini .
%(refname:short)
sebagai gantinya %(refname)
.
Saya mengambil perintah dari anatoly techtonik post menambahkan pesan utama dari tag / komit dan memformatnya sebagai kolom yang bagus.
Hasilnya adalah keluaran yang identik dengan git tag -n
tetapi dengan komit-hash sebagai awalan.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'
Jika Anda ingin memiliki hash yang panjang daripada yang pendek, Anda cukup mengganti objectname:short
dengan objectname
.
git tag
(-n
atau beberapa opsi lain ...) tidak menunjukkan hash komit di tempat pertama. Sangat menyenangkan melihat solusi apa yang dibuat orang, tetapi saya menganggap ini sebagai cacat desain dalam opsi yang tersedia.