Bukan pertanyaan yang saya pertimbangkan untuk ditanyakan secara terpisah, tetapi saya bertanya-tanya mengapa git tag( -natau 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.
andreee
Jawaban:
142
Untuk mendapatkan tag git dengan hash SHA1 dari objek Tag, Anda dapat menjalankan:
Perhatikan, ini tidak akan membedakan antara tag ringan dan beranotasi. Untuk tag ringan itu akan menunjukkan komit dan untuk tag beranotasi itu akan menunjukkan hash dari objek tag itu sendiri.
Lily Ballard
20
Untuk menampilkan daftar tag dengan referensi yang dirujuk (dalam kasus tag beranotasi) gunakan git show-ref --tags -d. Tag yang berbeda diposkan dengan a ^{}.
S. Christoffer Eliesen
49
The git tagperintah 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 tdan git tagssebagai berikut:
Anda dapat menggunakan format tanggal lain dalam --dateopsi serta mengontrol sepenuhnya keluaran agar sesuai dengan selera unik Anda dalam --prettyopsi tersebut. Kedua opsi tersebut didokumentasikan dengan baik di Dokumentasi git-log .
Meskipun tidak seperti yang diminta OP (tampilkan hash komit sha1 ), ini sangat berguna karena pesan komit mungkin berguna juga. +1 dari saya.
Stelios Adamantidis
2
@nealmcb git logsangat 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 --datedi halaman bantuan. Saya telah memperbarui jawaban saya untuk menyertakan opsi ini.
ADTC
1
@SteliosAdamantidis Sebenarnya jawaban saya memberikan hash SHA1 yang disingkat (7 karakter pertama), dan jika Anda ingin hash lengkap, Anda selalu dapat memodifikasinya dengan --prettydan %H. Terima kasih atas +1 :)
ADTC
15
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:
Penggunaan git log --tags --oneline --no-walkjuga akan membedakan tag beranotasi secara otomatis. :)
ADTC
11
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 ^0akhiran 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!
Jawaban terbaik di sini, terima kasih @Jefromi. Perhatikan bahwa di shell cmd Windows, semua perintah git yang menggunakan ^ perlu dikutip: misalnya git rev-parse "tag1 ^ 0" "tag2 ^ 0".
yoyo
8
Saya memiliki pertanyaan serupa, tetapi menginginkan hash dari (beberapa) tag tertentu. Saya menemukan bahwa "show-ref" akan mengambil daftar tag, jadi ini tugasnya:
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.
Solusi bagus. Jika Anda ingin memiliki Only tagenames alih-alih nama refname lengkap, Anda dapat mengubah use %(refname:short)sebagai gantinya %(refname).
Radon8472
2
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 -ntetapi dengan komit-hash sebagai awalan.
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.Jawaban:
Untuk mendapatkan tag git dengan hash SHA1 dari objek Tag, Anda dapat menjalankan:
Outputnya akan terlihat seperti ini:
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:
Ini akan menghasilkan keluaran seperti:
Baris yang diakhiri dengan
^{}
start dengan hash SHA1 dari commit aktual yang ditunjuk tag.sumber
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
: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
dangit tags
sebagai berikut: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:
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 .sumber
git log
sangat kuat! Anda dapat menampilkannya persis apa yang Anda inginkan. Cobagit 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:
Hasil dengan tag ringan:
Hasil dengan tag beranotasi:
sumber
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
: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!
sumber
Saya memiliki pertanyaan serupa, tetapi menginginkan hash dari (beberapa) tag tertentu. Saya menemukan bahwa "show-ref" akan mengambil daftar tag, jadi ini tugasnya:
Namun, beberapa eksperimen dengan "git show" menghasilkan perintah ini:
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? .
sumber
Tag harus ditandatangani dan / atau dikirimi pesan. Tag ringan tidak memiliki objek SHA1 dan hanya referensi. Kalau tidak coba
git show
.sumber
Ini memberikan daftar semua komit untuk tag. Tag beranotasi berbeda. Kirimkan terima kasih di sini .
sumber
%(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.Jika Anda ingin memiliki hash yang panjang daripada yang pendek, Anda cukup mengganti
objectname:short
denganobjectname
.sumber