दिखाएँ कि आप किस टैग पर हैं?


216

मुझे यह पता लगाने में परेशानी हो रही है कि वर्तमान में कौन सा टैग चेक किया गया है।

जब मैं करता हूं:

git checkout tag1
git branch

मैं यह नहीं जान सकता कि मैं किस टैग पर हूं। यह केवल लॉग करता है:

* (no branch)
master

क्या यह पता लगाना संभव है कि कौन से टैग चेक किए गए हैं? उपरोक्त उदाहरण में, यह होगा tag1

जवाबों:


326

संपादित करें : Jakub Nar fubski में अधिक git-fu है। निम्नलिखित बहुत सरल आदेश पूरी तरह से काम करता है:

git describe --tags

(या बिना --tagsअगर आपने एक एनोटेट टैग की जाँच की है। मेरा टैग हल्का है, इसलिए मुझे thetags की आवश्यकता है)

मूल उत्तर इस प्रकार है:

git describe --exact-match --tags $(git log -n1 --pretty='%h')

अधिक गिट-फू वाले किसी व्यक्ति के पास अधिक सुरुचिपूर्ण समाधान हो सकता है ...

यह इस तथ्य का लाभ उठाता है कि git-logआपने जो चेक आउट किया है, उससे शुरू होने वाले लॉग की रिपोर्ट करता है। %hसंक्षिप्त हैश प्रिंट करता है। फिर git describe --exact-match --tagsटैग (हल्का या एनोटेट) पाता है जो वास्तव में प्रतिबद्ध है।

$()वाक्य रचना के ऊपर समझती है कि आप पार्टी या इसी तरह के प्रयोग कर रहे हैं।


22
git describeयदि आप वास्तव में (एनोटेट) टैग पर हैं, या <tag>-<n>-g<shortened sha-1>यदि नहीं, तो <n>कमिट्स की संख्या कहां से है , इसका उपयोग करके टैग नाम दिखाएगा <tag>
जकुब नारबस्की 12

1
@ जैकब - धन्यवाद। मैंने --exact-matchआपकी टिप्पणी से पहले अपने जवाब सेकंड में जोड़े । यह जानकर अच्छा लगा कि आप इसे हटा सकते हैं और फ़िज़ियर इनपुट से अच्छी जानकारी प्राप्त कर सकते हैं।
12

धन्यवाद, यह वही था जिसकी मुझे तलाश थी। Btw, यहां तक ​​कि git-description --exact-match (without --tags) मेरे लिए काम करता है।
grm

3
का उपयोग करना git rev-parse HEADएक बेहतर समाधान है git log -n1 --pretty='%h'... लेकिन आप बस HEAD(या कुछ भी नहीं, क्योंकि git describeहेड के लिए चूक के रूप में ) क्यों नहीं लिख सकते हैं ?
जकुब नारबस्की 13


71

इसने मेरे लिए काम किया git describe --tags --abbrev=0


2
हाँ। भले ही आप उस टैग पर न हों, यह काम करता है! :)
मार्टिन मुजतको

13
Uhhh। ... यदि आप टैग के बाद हैश तीन कमिट करते हैं, तो आप "उस टैग पर नहीं हैं।" यह आपको अंतिम टैग के पहले या कमिट पर बताता है कि इसकी जाँच की गई है। तो यह गलत है।
पहुंचना

विंडोज पर भी काम करता है :)
2:20

50

वर्तमान HEAD (या प्रतिबद्ध) पर सभी टैग दिखाएं

git tag --points-at HEAD

1
ध्यान दें कि यह कमांड कमांड-लाइन पर एक त्रुटि की रिपोर्ट नहीं करता है, भले ही परिणाम खाली आता हो। बग? यदि उस स्थान पर कई टैग हैं तो यह एक सूची भी देता है। यह सबसे अच्छा जवाब है लेकिन स्क्रिप्टर्स को इन कैविटीज़ को ध्यान में रखते हुए सावधानी से आगे बढ़ना चाहिए।
निगलना

@ Ingyhere की टिप्पणी के बाद। हां यह अच्छी जानकारी है कि इसमें कोई त्रुटि नहीं है, और लोगों को तदनुसार परिणाम को संभालने की आवश्यकता है। लेकिन मैं इसे बग नहीं कहूंगा। मेरे मामले के लिए, "खाली अगर कोई टैग नहीं" वैध है। अन्य मामलों में, कोई व्यक्ति इसे एक चर में सहेज सकता है, फिर जांचें कि क्या यह खाली है (निर्देशों को
काटने के

23

git describeएक चीनी मिट्टी के बरतन कमान है, जिसे आपको बचना चाहिए:

http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html

इसके बजाय, मैंने इस्तेमाल किया:

git name-rev --tags --name-only $(git rev-parse HEAD)

11
यह "अपरिभाषित" लौट रहा है
अजनबी

4
यह ^0कमिट के लिए एक अनुगामी आउटपुट करता है जो टैग के अनुरूप होता है (उदाहरण के लिए, टैग के लिए 1.0यह आउटपुट 1.0^0)। क्या केवल Git आउटपुट होने का कोई तरीका है 1.0, या मुझे इसके लिए sed का उपयोग करना चाहिए?
डैनियल सेरोडियो

13
बस कुछ अवधारणात्मक नाइटपैकिंग: मुझे लगता है कि आप चीनी मिट्टी के बरतन और प्लंबिंग के अर्थ को उल्टा करते हैं। चीनी मिट्टी के बरतन का उपयोग करना ठीक है, यह उच्च स्तर का है और सामान्य उपयोग के लिए है । नलसाजी ist आंतरिक (जैसा कि नाम से पता चलता है) और केवल अनुशंसित नहीं है क्योंकि गिट डेवलपर्स बिना किसी चेतावनी के अपने तर्क और आउटपुट को बदलने का अधिकार रखते हैं। तो आपका पहला सुझाव वास्तव में थोड़ा अधिक उपयुक्त है।
लियो एंट्यून्स

5
लिंक किया गया लेख "गिट शाखा" के उपयोग से बचने के लिए कहता है क्योंकि यह इस उपयोग के मामले में काम नहीं करता है। मैं git वर्णन का उपयोग करने से बचने के लिए किसी भी अच्छे कारण के बारे में नहीं सोच सकता। जैसे लियो कहते हैं, "पोर्सिलेन" कमांड ऐसी कमांड्स हैं जिन्हें आप आमतौर पर इस्तेमाल करते हैं। प्लंबिंग कमांड से बचें जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं। "गिट वर्णन" महान काम करता है।
डैनी

4
"चीनी मिट्टी के बरतन" कमांड वे हैं जिनका आपको उपयोग करना चाहिए, न कि उन लोगों से जिन्हें आपको बचना चाहिए। वे कमांड हैं जिनका आउटपुट मशीन पठनीय है और भविष्य के संस्करणों में नहीं बदलेगा, इसलिए स्क्रिप्ट आदि पर भरोसा किया जा सकता है। गैर-चीनी मिट्टी के बरतन आदेश मानव-पठनीय आउटपुट का अधिक उत्पादन करते हैं, लेकिन यह भविष्य के संस्करणों में बदल सकता है जैसे इसे और अधिक बनाने के लिए। पठनीय, इसलिए नहीं कि कुछ महत्वपूर्ण वास्तव में बदल गया है।
rjmunro

22

जब आप एक टैग की जाँच करते हैं, तो आपको एक "अलग सिर" कहा जाता है । आम तौर पर, Git की हेड कमिट उस शाखा का एक संकेतक है जिसे आपने वर्तमान में चेक आउट किया है। हालाँकि, यदि आप स्थानीय शाखा (एक टैग या एक दूरस्थ शाखा, उदाहरण के लिए) के अलावा कुछ और देखते हैं, तो आपके पास "अलग सिर" है - आप वास्तव में किसी भी शाखा पर नहीं हैं। अलग किए गए सिर पर आपको कोई कमिट नहीं करना चाहिए।

यदि आप कोई संपादन नहीं करना चाहते हैं तो एक टैग की जाँच करना ठीक है। यदि आप केवल फ़ाइलों की सामग्री की जांच कर रहे हैं, या आप एक टैग से अपनी परियोजना बनाना चाहते हैं, तो यह तब तक ठीक है git checkout my_tag, जब तक आप कोई कमिट नहीं करते , फाइलों के साथ काम करते हैं । यदि आप फ़ाइलों को संशोधित करना शुरू करना चाहते हैं, तो आपको टैग के आधार पर एक शाखा बनानी चाहिए:

$ git checkout -b my_tag_branch my_tag

my_tag_branchसे शुरू होने वाली एक नई शाखा का निर्माण करेगा my_tag। इस शाखा में परिवर्तन करना सुरक्षित है।


1
शानदार जवाब।
पैनोस फिलियानोस

9

git log --decorate

यह आपको बताएगा कि वर्तमान में चेक आउट किए गए कमिट की ओर कौन से रेफरी इशारा कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.