Bagaimana cara mendaftar semua tag yang mengandung komit?

227

Pertanyaan ini mirip dengan Cara daftar semua tag yang menunjuk ke komit tertentu di git , tetapi dengan satu perbedaan: Saya ingin mencari semua tag yang berisi komit tertentu di dalam pohon setiap tag, tidak secara khusus file yang ditandai dalam tag sendiri (dalam hal ini, hanya perubahan Makefile yang telah ditandai).

atx
sumber
1
Anda tidak dapat menandai file tertentu - tag hanya menunjukkan komit. Anda mungkin ingin mengedit pertanyaan Anda dengan lebih detail masalah yang Anda benar-benar coba selesaikan.
Mark Longair
Catatan: pada Windows, pastikan untuk menggunakan git 2.0.x (2014) jika Anda ingin git tag --containsuntuk tidak crash. Lihat jawaban saya di bawah ini
VonC

Jawaban:

348
git tag --contains <commit>
amalloy
sumber
2
Saya sudah mencoba ini. Tetapi jika tag hanya berisi satu file, saya percaya itu hanya mencari melalui file itu. Itu tidak akan mencari pohon. Juga, repositori yang saya coba adalah git yang sangat besar ditebus dan mendapatkan SIGKILL'ed.
atx
21
Tag tidak mengandung file. Mereka hanya penanda untuk komit. Mengingat itu, saya pikir keberatan Anda tidak masuk akal.
amalloy
Itu tidak boleh menunjukkan kepada saya komit karena kurangnya memori dalam kasus itu. Apakah Anda tahu bagaimana saya bisa mengatasi ini?
atx
5
Apakah ada cara untuk melakukan ini terhadap tag jarak jauh? Mirip dengan cabang:git branch -r --contains <commit>
Mike
23

Perhatikan bahwa Anda memerlukan git 2.0.x (Q3 2014) untuk mendaftar semua tag untuk komit tertentu jika Anda memiliki repo besar

Lihat commit cbc60b6 oleh Jean-Jacques Lafay (lanfeust69 ) :

git tag --contains: hindari stack overflow

Dalam repo besar, implementasi rekursi dari PT contains(commit, commit_list) dapat menghasilkan stack overflow. Ganti rekursi dengan loop untuk memperbaikinya.

Masalah ini lebih jelas pada Windows daripada di Linux, di mana tumpukan lebih terbatas secara default.

Lihat juga utas ini pada daftar msysGit .

VONC
sumber
9
Tidak ada permainan kata-kata yang dimaksudkan? ;-)
MikeSchinkel
3
@ MikeSinkink Yah ... setidaknya bukan yang disengaja .
VonC
16
git tag --contains <sha1_hash> 

harus bekerja

manojlds
sumber