Git में किसी विशिष्ट कमेंट को इंगित करने वाले सभी टैग को कैसे सूचीबद्ध करें


85

मैं आदेशों को देखा है git describeऔर git-name-revलेकिन मैं एक टैग की तुलना में अधिक सूची में उन्हें पाने में कामयाब रहे नहीं किया है।

उदाहरण: मेरे पास sha1 48eb354 है और मुझे पता है कि A और B इसके टैग हैं। इसलिए मुझे एक git कमांड चाहिए git {something} 48eb354जो "A, B" के समान आउटपुट उत्पन्न करे। मैं संदर्भों के सापेक्ष अन्य टैग या शाखाओं को जानने में दिलचस्पी नहीं रखता, केवल टैग के लिए सटीक मिलान करता हूं।

जवाबों:


46

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

हल्के और एनोटेट टैग के लिए काम करना चाहिए।


धन्यवाद। वास्तव में मैं क्या चाहता हूँ।
मृत्युंजय

यह git <1.7.10 के लिए अच्छी तरह से काम करता है। क्या आप बता सकते हैं कि sed अभिव्यक्ति का दूसरा भाग क्या करता है? -e 's/\^{}//'
डेव

आह, कोई बात नहीं, यह पता लगा। यह -dविकल्प पर है git show-ref। डॉक्स से, "-d, --dereference डेरेफेरेंस ऑब्जेक्ट्स आईडी में टैग करता है। उन्हें" ^ {} "के साथ दिखाया जाएगा।"
डेव

1
मनमाने ढंग से उपयोग करने के लिए थोड़ा वृद्धि / सामान्यीकरण ${ref}, एनोटेट टैग सहित:hash=$(git rev-parse "${ref}^0"); git show-ref --tags -d | sed -n -e 's,^'"${hash}"' refs/tags/\(.*\)^{}$',\1,p'
क्रिश्चियन गोएत्ज़


50

आप उपयोग कर सकते हैं:

git tag --contains <commit>

यह निश्चित टैग पर सभी टैग दिखाता है। इसके स्थान पर इसका उपयोग किया जा सकता है:

git tag --points-at HEAD

यह केवल 1.7.10 से उपलब्ध है।


10
नायब: 'git tag --contains' केवल उन टैग्स को नहीं दिखाता है जो कमिट करने के लिए इंगित करते हैं, बल्कि इसमें बाद में पाए जाने वाले टैग भी शामिल हैं।
staafl

कम से कम संस्करण २.६.४ में, यह केवल एक ही टैग लौटाता है जो निर्दिष्ट प्रतिबद्ध की ओर इशारा करता है। यह उन सभी को वापस नहीं करता है। @Max द्वारा ऊपर दिया गया उत्तर कई टैग के लिए ठीक से काम करता है।
देजय क्लेटन

--containsभी --points-at(7-8s निष्पादन समय बनाम <1s) की तुलना में बहुत धीमा दिखाई देता है
SSILk

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
  grep ^$commit_id |
    cut -d' ' -f2

अफ़सोस कि इसे और आसानी से नहीं किया जा सकता है। git tagप्रतिबद्ध आईडी को शामिल करने के लिए एक और झंडा git for-each-refस्वाभाविक रूप से उस आह्वान को व्यक्त कर सकता है ।


1
जानकारी के लिए धन्यवाद, लेकिन मुझे लगता है कि इस कमांड का उपयोग करके टैग देखने में सक्षम नहीं हैं। सरल "git for-each-ref | grep 48eb354" का उपयोग करके 0 मैच दिए जाते हैं। दूसरी ओर gitk अच्छी तरह से इस प्रतिबद्ध के सामने 2 टैग सूचीबद्ध करता है।
१२:४

1

निम्न आदेश काम करता है, लेकिन सीधे .it निर्देशिका की सामग्री को पार्स करता है और इस प्रकार यदि गिट रिपॉजिटरी प्रारूप बदल जाता है तो यह टूट सकता है।

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'

उन्हें या तो सूचीबद्ध नहीं करता है, केवल वही स्थान है जो मुझे दिखाई देता है अगर पूरे .it फ़ोल्डर को पकड़ना gitk.cache में है और लॉग / रेपो / रेमो / मूल / मास्टर है। कैसे gitk उन्हें सूचीबद्ध कर सकते हैं? मैं यह भी नोटिस करता हूं कि जिन टैग्स को मैं देख रहा हूं, वे एनोटेट टैग हैं, यही कारण है कि दो वर्तमान उत्तर मेरे लिए काम नहीं कर रहे हैं।
ज़ित्रक डेस

1

वर्तमान प्रतिबद्ध के लिए आप उपयोग कर सकते हैं

git tag --points-at $(git log -n1 --pretty='%H')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.