सवाल गिट में वर्तमान शाखा का नाम कैसे प्राप्त करें?


मैं एक सबवर्जन पृष्ठभूमि से हूं और, जब मेरी एक शाखा थी, मुझे पता था कि मैं किस काम पर काम कर रहा था "ये काम करने वाली फाइलें इस शाखा को इंगित करती हैं"।

लेकिन गिट के साथ मुझे यकीन नहीं है कि जब मैं नेटबीन या नोटपैड ++ में एक फाइल संपादित कर रहा हूं, चाहे वह मास्टर या किसी अन्य शाखा से जुड़ा हुआ हो।

इसमें कोई समस्या नहीं है git बाश में, यह मुझे बताता है कि मैं क्या कर रहा हूं।


1718
2018-06-05 20:13


मूल


अपने आईडीई फ़ाइल को प्रदर्शित करने दें .git/HEAD, संभवतः एक मूल निर्देशिका में - Tino
stackoverflow.com/questions/1417957/... $ git rev-parse --abbrev-ref HEAD - fantastory
के संभावित डुप्लिकेट वर्तमान चेक आउट गिट शाखा को प्रोग्रामेटिक रूप से निर्धारित करने के लिए कैसे करें - tripleee
व्यू -> नेटबीन में वर्जनिंग लेबल्स सक्षम करें, तो आपको केवल वर्तमान शाखा को देखने के लिए प्रोजेक्ट (या फ़ाइल, या पसंदीदा) फ़ोल्डर पर अपने माउस को घुमाने की ज़रूरत है। - idclaar
के संभावित डुप्लिकेट गिट में केवल वर्तमान शाखा दिखाएं - techraf


जवाब:


git branch

अपने रेपो की सभी स्थानीय शाखाओं को दिखाना चाहिए। तारांकित शाखा आपकी वर्तमान शाखा है।


1298
2018-06-05 20:17



यदि आप एक्लिप्स में काम करने के इच्छुक हैं, तो "ईजीआईटी" नामक एक कार्यक्रम है जिसमें एक जीयूआई है जो आपको सभी रिपो के लिए वर्तमान शाखा बताएगी। अन्यथा, मुझे नहीं पता .. आप जिस भी प्लगइन का उपयोग करना चाहते हैं उसके निर्माता की दया पर होगा जो प्रोग्राम की अपनी पसंद के साथ संगत है (यदि कोई है)। - roberttdev
git branch | grep \* केवल वर्तमान शाखा लौटने के लिए (लेकिन अभी भी इसके सामने एक स्टार के साथ) - fboes
git branch | grep \* | cut -d ' ' -f2 स्टार के बाद अंतरिक्ष पर विभाजित करने के लिए, केवल नाम लौट रहा है। @Fboes द्वारा टिप्पणी के आधार पर - jgraup
git branch | grep \* | cut -d ' ' -f2- - मैं @ jgraup की टिप्पणी में छोटे बदलाव का सुझाव दूंगा (प्रतिस्थापित करें -f2 साथ में -f2-) पहली जगह के बाद सब कुछ पाने के लिए, क्योंकि मामले में * (HEAD detached at ff3de3c) आपको मिला (HEAD केवल - boobiq
Btw: git rev-parse --abbrev-ref HEAD (जैसा कि नीचे उल्लिखित है) बिना किसी आगे के काम करता है, और बिना मौजूदा शाखा नाम देता है sed या grep - fboes


git rev-parse --abbrev-ref HEAD --

वह वर्तमान शाखा प्रदर्शित करेगा।

संदर्भ:


3643
2017-08-27 12:33



@ChrisNelson, क्योंकि यह सभी शाखाओं की एक लंबी सूची के बजाय केवल वर्तमान शाखा प्रदर्शित करता है। - avakar
अच्छा, दुख की बात यह नहीं है कि अगर आप 'अलग सिर' राज्य में हैं (यह सिर्फ 'हेड' आउटपुट करता है, जो पूरी तरह से बेकार है)। - Carlos Campderrós
मुझे लगता है कि अगर आप 'अलग सिर' राज्य में हैं तो गिट इंटर्नल्स द्वारा अनुमान लगाया गया है कि शाखा की कोई ट्रैकिंग नहीं है, क्योंकि यह संबंधित है git branch दिखाता है * (no branch), जो भी बेकार है ... - Carlos Campderrós
"गिट प्रतीकात्मक-रेफ - शॉर्ट हेड" भी इसी उद्देश्य के लिए काम करता है - dusktreader
git rev-parse --abbrev-ref HEAD 2>/dev/null  / Dev / null भाग आपको एक त्रुटि देखने से रोकता है अगर आपने अभी एक नया भंडार बनाया है जो अभी तक नहीं है। - Paradiesstaub


आपके पास भी है git symbolic-ref HEAD जो पूर्ण रेफस्पेक प्रदर्शित करता है।

गिट v1.8 में बाद में केवल शाखा का नाम दिखाने के लिए (बाद में इंगित करने के लिए ग्रेग का धन्यवाद):

$ git symbolic-ref --short HEAD

गिट v1.7 + पर आप यह भी कर सकते हैं:

$ git rev-parse --abbrev-ref HEAD

यदि आप शाखा में हैं तो दोनों को एक ही शाखा का नाम देना चाहिए। यदि आप अलग-अलग सिर उत्तरों पर हैं तो अलग-अलग हैं।

ध्यान दें:

पहले के ग्राहक पर, यह काम करता प्रतीत होता है:

$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

- डेरिन 26. मार्च 2014


399
2017-08-08 15:55



अन्य सभी उत्तरों के रूप में, यह तब काम नहीं करता जब आप 'अलग सिर' स्थिति में हों - Carlos Campderrós
@ कार्लोस कैम्पडररोस: यदि आप अलग हेड स्टेट में हैं, तो वर्तमान शाखा जैसी कोई चीज़ नहीं है। आखिरकार, जो प्रतिबद्धता आप कर रहे हैं वह शून्य, एक या अधिक शाखाओं तक पहुंच योग्य हो सकती है। - Flimm
जब कोई सिर नहीं होता है तो इससे खाली गिट भंडार में समस्याएं होती हैं - Arne
गिट संस्करण 2.4.4 के साथ git rev-parse --abbrev-ref HEAD दिखाता है HEAD जब आप अलग सिर पर हैं। - peterhil
सबसे अच्छा जवाब अभी भी है git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"  चूंकि यह एक स्ट्रिंग प्रदर्शित करेगा HEAD detached at a63917f जब एक अलग राज्य में, अन्य उत्तरों के विपरीत जो कुछ भी नहीं या सिर दिखाते हैं। यह महत्वपूर्ण है। - Alkaline


मेरे अपने संदर्भ के लिए (लेकिन यह दूसरों के लिए उपयोगी हो सकता है) मैंने इस थ्रेड में उल्लिखित अधिकांश (मूल कमांड लाइन) तकनीकों का एक अवलोकन किया है, प्रत्येक कई उपयोग मामलों पर लागू होता है: HEAD (पॉइंटिंग) है:

  • स्थानीय शाखा (मास्टर)
  • रिमोट ट्रैकिंग शाखा, स्थानीय शाखा के साथ सिंक में (मास्टर / मास्टर के रूप में एक ही प्रतिबद्धता पर मास्टर)
  • रिमोट ट्रैकिंग शाखा, स्थानीय शाखा (मूल / फीचर-फू) के साथ सिंक में नहीं
  • टैग (v1.2.3)
  • सामान्य अलग सिर (उपर्युक्त में से कोई नहीं)

परिणाम:

  • git branch | sed -n '/\* /s///p'
    • स्थानीय शाखा: master
    • रिमोट ट्रैकिंग शाखा (सिंक में): (detached from origin/master)
    • रिमोट ट्रैकिंग शाखा (सिंक में नहीं): (detached from origin/feature-foo)
    • टैग: (detached from v1.2.3)
    • सामान्य अलग सिर: (detached from 285f294)
  • git status | head -1
    • स्थानीय शाखा: # On branch master
    • रिमोट ट्रैकिंग शाखा (सिंक में): # HEAD detached at origin/master
    • रिमोट ट्रैकिंग शाखा (सिंक में नहीं): # HEAD detached at origin/feature-foo
    • टैग: # HEAD detached at v1.2.3
    • सामान्य अलग सिर: # HEAD detached at 285f294
  • git describe --all
    • स्थानीय शाखा: heads/master
    • रिमोट ट्रैकिंग शाखा (सिंक में): heads/master (ध्यान दें: नहीं  remotes/origin/master)
    • रिमोट ट्रैकिंग शाखा (सिंक में नहीं): remotes/origin/feature-foo
    • टैग: v1.2.3
    • सामान्य अलग सिर: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • स्थानीय शाखा: ref: refs/heads/master
    • अन्य सभी उपयोग मामलों: संबंधित प्रतिबद्धता के एसएचए
  • git rev-parse --abbrev-ref HEAD
    • स्थानीय शाखा: master
    • अन्य सभी उपयोग के मामले: HEAD
  • git symbolic-ref --short HEAD
    • स्थानीय शाखा: master
    • अन्य सभी उपयोग के मामले: fatal: ref HEAD is not a symbolic ref

(एफवाईआई यह गिट संस्करण 1.8.3.1 के साथ किया गया था)


168
2017-10-25 08:53



संक्षेप में, कोई भी ऐसा नहीं करता जो मैं हाथ से करता हूं। - bukzor
यह मेरे लिए काफी उपयोगी था: git describe --all --exact-match 2>/dev/null | sed 's=.*/==' मेरे लिए सबसे अच्छा समाधान था (टैग और शाखा के प्रमुखों के लिए अच्छे नाम, यादृच्छिक अलग सिर के लिए कोई आउटपुट नहीं। - Alex Dupuy
हालांकि, मैंने अभी इसका उपयोग किया है git describe जब एक ही प्रतिबद्धता का संदर्भ देने वाली कई शाखाएं होती हैं, तो गंभीर विफलता होती है, उदा। एकदम बाद git checkout -b foo - यह उनमें से एक को मनमाने ढंग से उपयोग करता है (ऐसा लगता है कि हाल ही में बनाया गया सबसे अधिक)। मैं फ़िल्टर किए गए आउटपुट का उपयोग करने के लिए अपनी रणनीति बदल दूंगा git branch और केवल उपयोग करें git describe अगर परिणाम एक अलग सिर के बारे में कुछ है। - Alex Dupuy
दरअसल, मुझे उपयोग करने की ज़रूरत है git branch --no-color यह सुनिश्चित करने के लिए कि फ़ाइल नाम कष्टप्रद टर्मिनल एस्केप कोड से मुक्त है। - Alex Dupuy
यह मेरे लिए वास्तव में एक से अधिक उपयोगी रहा है, बहुत गहन होने के लिए धन्यवाद! - Alice Purcell


एक और विकल्प:

git name-rev --name-only HEAD

118
2017-11-02 19:17



इसे भी पुनः प्राप्त किया जा सकता है echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/} - Antoine
यह काम नहीं करता है अगर हेड मास्टर और फीचर शाखा (उदा। विलय के दौरान) के लिए समान है। फीचर शाखा पर निष्पादित होने पर भी यह 'मास्टर' लौटाता है। - Orest Hera
git checkout master && git name-rev --name-only HEAD # ac-187 यह उम्मीद के रूप में काम नहीं करता है - Alexander Abashkin
मैं विलय से ठीक पहले इसे एक चर में सहेजता हूं और यदि मामलों में कोई विशेष प्रतिबद्धता जांचता है तो मेरे सिर को डी-अटैचमेंट भी मिल सकता है। इन मामलों में यह ठीक काम करता है। - Ishaan Sejwal
मैं इसे जेनकींस पाइपलाइन से कर रहा हूं। तो यह मेरे लिए सबसे अच्छा जवाब होने के लिए प्रतीत होता है। करते हुए git branch --list बस कहते हैं * (HEAD detached at 7127db5)। करते हुए git rev-parse --abbrev-ref HEAD बस कहते हैं HEAD और इसी तरह। - Mig82


काफी आसान है, मैं इसे एक लाइनर (बैश) में मिला

git branch | sed -n '/\* /s///p'

(क्रेडिट: सीमित प्रायोजन)

और जब मैं वहां हूं, तो एक लाइनर रिमोट ट्रैकिंग शाखा (यदि कोई हो) प्राप्त करने के लिए

git rev-parse --symbolic-full-name --abbrev-ref @{u}

87
2018-04-04 15:20



बहुत सारे स्लेश! :) sed -n 's/\* //p' उसने चाल चली। हालांकि मैं पागलपन की तरफ जाता हूं इसलिए मैं इसे लंगर दूंगा sed -n 's/^\* //p'। - Mark Reed


आप लिनक्स पर केवल कमांड लाइन (कंसोल) टाइप कर सकते हैं, रिपॉजिटरी निर्देशिका में:

$ git status

और आप कुछ पाठ देखेंगे, जिनमें से कुछ समान है:

...
On branch master
...

जिसका मतलब है कि आप वर्तमान में चालू हैं master डाली। यदि आप उस पल में किसी भी फाइल को संपादित कर रहे हैं और यह उसी स्थानीय भंडार में स्थित है (स्थानीय निर्देशिका जिसमें गिट संस्करण नियंत्रण प्रबंधन के अंतर्गत हैं), तो आप इस शाखा में फ़ाइल संपादित कर रहे हैं।


49
2018-06-05 20:31



आप जो करना चाहते हैं उसके आधार पर, आप इसका उपयोग कर सकते हैं git status और केवल आउटपुट की पहली पंक्ति प्राप्त करें git status | head -1 जो कुछ पसंद करता है # On branch master। मुझे यकीन है कि संस्करण अंतरों के लिए भी जिम्मेदार होना आवश्यक है। - Joshua Pinter
@ जोशपिनटर: आप भी इसका उपयोग कर सकते हैं git status | grep 'On branch', जो एक ही प्रभाव होना चाहिए (चाहिए, इसका मतलब यह नहीं होगा कि गिट का आपका संस्करण इसे अलग-अलग प्रदर्शित करता है)। या git branch | grep '*', जो इसकी शुरुआत में एक स्टार के साथ शाखा का नाम दिखाएगा। - Tadeck
हाँ, यह भी काम करता है और अधिक लचीला हो सकता है। एक देव रेल ऐप में केवल शाखा का नाम दिखाने के लिए मेरा अंतिम परिणाम था: <tick>git status | head -1<tick>.gsub('# On branch ', '') - Joshua Pinter
git status यदि बहुत सारी फाइलें प्रबंधित की जा रही हैं तो मूल्य वापस करने में लंबा समय लग सकता है। - the Tin Man


git symbolic-ref -q --short HEAD

मैं इसे स्क्रिप्ट में उपयोग करता हूं जिसके लिए वर्तमान शाखा नाम की आवश्यकता होती है। यह आपको हेड के वर्तमान लघु प्रतीकात्मक संदर्भ दिखाएगा, जो आपकी वर्तमान शाखा का नाम होगा।


26
2017-10-02 22:09



धन्यवाद, महान काम करता है! - मैं इसके साथ अपनी स्क्रिप्ट में "-C path_to_folder" भी जोड़ रहा हूं। - Tony