Saya memiliki banyak tag yang tidak ditandai di repositori dan saya ingin mencari tahu komit mana yang mereka tuju. Apakah ada perintah yang hanya akan mencantumkan tag dan komit SHA mereka? Memeriksa tag dan melihat KEPALA tampaknya agak terlalu melelahkan bagi saya.
Memperbarui
Saya menyadari setelah saya pergi melalui tanggapan bahwa apa yang sebenarnya saya inginkan adalah hanya melihat sejarah yang mengarah ke tag, yang git log <tagname>
cukup.
Jawaban yang ditandai sebagai jawaban berguna untuk mendapatkan daftar tag dan komitmennya, itulah yang saya tanyakan. Dengan sedikit peretasan shell, saya yakin mungkin mengubahnya menjadi pesan SHA + Commit.
git show-ref
menunjukkan sha dari tag, bukan sha dari revisi repo. $ tes git-ref 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 ref / tag / test $ tes checkout git KEPALA sekarang di c7f8831 ... $ git checkout 08b9c77 KEPALA sekarang di c7f8831 ...--dereference
Jawaban:
Salah satu cara untuk melakukan ini adalah dengan
git rev-list
. Berikut ini akan menampilkan komit yang dituju oleh tag:Anda bisa menambahkannya sebagai alias
~/.gitconfig
jika Anda sering menggunakannya:Dan kemudian menyebutnya dengan:
sumber
git rev-parse <tag>
? Ataugit rev-list -1 <tag>
?git rev-parse $TAG
mengembalikan SHA1 dari objek tag, bukan komit yang ditunjuknya.git rev-list -1
bekerja, meskipun.git rev-parse $TAG^{commit}
ataugit rev-parse $TAG^{}
untuk menandai tag beranotasi / bertanda tangangit rev-list $TAG --max-count=1
git tag -a
ataugit tag -s
, makagit rev-parse <tag>
akan memberi Anda SHA-1 dari objek tag itu sendiri, sementaragit rev-list -1 <tag>
akan memberikan SHA-1 dari komit (revisi) yang ditunjuknya, sama dengangit rev-parse <tag>^{commit}
. HTH.Misalnya,
git show-ref --abbrev=7 --tags
akan menampilkan sesuatu seperti berikut:sumber
.git/packed-refs
atau.git/refs/tags/*
git tag --verbose
menunjukkannya juga?-d
tanda untuk mendapatkan komit yang dirujuk (di baris kedua).git show-ref
berperilaku berbeda pada dua jenis tag berbeda tidak jelas atau pengetahuan umum.Gunakan saja
git show <tag>
Namun, itu juga kesedihan melakukan diff. Untuk menghilangkan perbedaan tersebut, gunakan
git log -1 <tag>
. (Terima kasih kepada @DolphinDream dan @demisx!)sumber
git show <tag>
menunjukkan diff, bukan komit yang diarahkan tag.git show
kesedihan lebih banyak barang di layar yang tidak perlu ada di sana. Ini mengaburkan hash commit aktual yang dicari. Perintah yang lebih baik adalahgit log -1 [tag-name]
ataugit log -1 --pretty=oneline [tag-name]
jika Anda menginginkan orang yang tidak berhak.Di repositori saya,
git show-ref TAG
menunjukkan hash tag, bukan hash dari commit yang ditunjukkannya.git show-ref --dereference TAG
menunjukkan, selain itu, komit diarahkan.sumber
Dari Igor Zevaka :
Ringkasan
Karena ada sekitar 4 jawaban yang hampir dapat diterima namun berbeda, saya akan merangkum semua cara yang berbeda untuk membuat tag.
git rev-list -1 $TAG
( jawab ).git rev-list
menampilkan komit yang mengarah ke yang$TAG
serupa dengangit log
tetapi hanya menunjukkan SHA1 dari komit. The-1
membatasi output untuk komit itu menunjuk pada.git show-ref --tags
( jawab ) akan menampilkan semua tag (lokal dan diambil dari jarak jauh) dan SHA1 mereka.git show-ref $TAG
( jawab ) akan menampilkan tag dan jalurnya bersama dengan SHA1.git rev-parse $TAG
( jawaban ) akan menunjukkan SHA1 dari tag yang tidak ditandai.git rev-parse --verify $TAG^{commit}
( jawaban ) akan menampilkan SHA1 dari tag yang beranotasi dan yang tidak ditandai. Di Windows gunakangit rev-parse --verify %TAG%^^^^{commit}
(empat topi).cat .git/refs/tags/*
ataucat .git/packed-refs
( jawab ) tergantung pada apakah tag tersebut lokal atau diambil dari jarak jauh.sumber
Menggunakan
(yang akan mengembalikan SHA-1 dari komit bahkan untuk tag beranotasi).
git show-ref <tag>
juga akan berfungsi jika<tag>
tidak dijelaskan. Dan selalu adagit for-each-ref
(lihat dokumentasi untuk detail).sumber
git rev-parse <tag>~0
yang tampaknya juga berfungsi, dan tidak memerlukan pelarian khusus pada Windows (di mana empat topi (^) diperlukan, bukan satu). Sufiks~<number>
memberikan komit ke <nomor> orangtua, oleh karena itu~0
menghasilkan komit itu sendiri. Btw,^0
juga merupakan singkatan yang valid untuk^{commit}
akhiran revisi.Bagaimana dengan ini:
ATAU
sumber
Untuk mendapatkan sha / hash dari commit yang merujuk tag (bukan sha dari tag):
git rev-list -1 <tag>
sumber
Saya juga ingin tahu cara "benar", tetapi sementara itu, Anda bisa melakukan ini:
sumber
git show --oneline mytag | head -1
Meskipun ini cukup lama, saya pikir saya akan menunjukkan fitur keren yang baru saja saya temukan untuk mendaftar tag dengan komit:
Ini akan menampilkan cabang yang mengakhiri / mulai dari komit, dan tag untuk komit.
sumber
Anda juga bisa mendapatkan gambar yang lebih mudah diinterpretasikan dari mana tag menunjuk ke penggunaan
dan kemudian gulir ke tag yang Anda cari via
/
.Tampilan lebih ringkas (
--pretty=oneline
) plus semua kepala (-a
) juga dapat membantu:Terlihat sedikit menakutkan, tetapi bisa juga di aliased
~/.gitconfig
jika diperlukan.sumber
Jawaban singkat pasca-Git-2
Saya tahu pertanyaan ini sudah lama ada di sini. Dan jawaban dari CB Bailey adalah 100% benar:
git show-ref --tags --abbrev
Saya suka yang ini lebih baik karena menggunakan
git tag
:Sederhana. Pendek.
PS alias seperti
git taglist
dengan perintah ini:sumber
Dari milis git , berikut adalah cara untuk mendapatkan daftar tanda hash untuk tag dengan dereferencing otomatis untuk tag beranotasi:
sumber
Ini tidak menunjukkan nama file, tetapi setidaknya Anda merasakan repositori.
Setiap file dalam direktori tersebut berisi SHA komit yang menunjuk ke komit.
sumber
.git/packed-refs
meskipun berhasil.Saya juga ingin tahu cara yang benar , tetapi Anda selalu dapat mengintip ke:
atau:
sumber
git rev-list
.Ini akan memberi Anda hash SHA1 saat ini
Hash Komit Singkat
Hash Komit
sumber
git log <tag> -n 1 --pretty=%H
tidakJika Anda ingin melihat detail dari tag SOMETAG (tagger, tanggal, dll), hash dari komit menunjuk ke dan sedikit info tentang komit tetapi tanpa perbedaan penuh, coba
Contoh output:
sumber
Jadi saya punya banyak folder rilis, di mana folder-folder itu mungkin diperiksa dari salah satu dari beberapa repo yang berbeda, dan mungkin dev, qa atau cabang utama atau mungkin rilis produksi, diperiksa dari tag, dan tag mungkin beranotasi atau tidak. Saya memiliki skrip yang akan melihat folder target dan mendapatkan jawaban dalam bentuk -. Masalahnya adalah berbagai versi git mengembalikan status berbeda 'untuk checkout tag.
Jadi saya menemukan
git show-ref --tags
bekerja pada awalnya, kecuali untuk tag beranotasi. Namun menambahkan -d menambahkan entri terpisah ke daftar tag, satu untuk tag, yang lain untuk anotasi (komit anotasi diidentifikasi sebagai ^ {} yang saya hapus dengan sed).Jadi ini adalah inti dari skrip saya, untuk siapa saja yang menginginkannya: -
sumber
Dapat digunakan di bawah, Ini akan memberikan hash komit
git show -s --format=%H <tag>^{commit}
Jika disingkat melakukan hash diperlukan,
git show -s --format=%h <tag>^{commit}
sumber