Git में वर्तमान शाखा का नाम कैसे प्राप्त करें?


2591

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

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

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


11
.git/HEADसंभवत : अपनी आईडीई फ़ाइल को मूल निर्देशिका में प्रदर्शित करें
Tino

101



9
2.22 Git (Q2 2019) के साथ, आपके पास एक सरल तरीका होगा git branch --show-current:। मेरा जवाब यहां देखें ।
वॉनक

जवाबों:


2299
git branch

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

यदि आप केवल उस शाखा का नाम प्राप्त करना चाहते हैं जिस पर आप हैं, तो आप यह कर सकते हैं:

git rev-parse --abbrev-ref HEAD

लेकिन उस नोटपैड ने मुझे नोटपैड ++ और नेटबीन्स की मदद की। बस गिट बैश (और प्रोबोबिली विम) और मैंने इसका उल्लेख किया। मैं अन्य Ide और पाठ संपादकों के साथ काम करने की कोशिश कर रहा हूं जो कमांड लाइन पर हैं।
माइक ६२

@ mike628 वास्तव में वे आपकी मदद कर रहे हैं सिवाय इसके कि आप GUI के माध्यम से कुछ सुलभ चाहते हैं। सही बात?
ताडेक

2
यदि आप एक्लिप्स में काम करने के इच्छुक हैं, तो "ईजीट" नामक एक कार्यक्रम है जिसमें एक जीयूआई है जो आपको इसमें सभी रेपो के लिए वर्तमान शाखा बताएगा। अन्यथा, मैं नहीं जानता .. आप जिस भी प्लगइन का उपयोग करना चाहते हैं, उसके निर्माता की दया पर होगा जो आपकी पसंद के कार्यक्रम के अनुकूल हो (यदि कोई हो)।
रॉबर्टबेटेव

2
git checkout --orphan fooतब git branchशाखा दिखाने में विफल रहने के बाद foo। जबकि git symbolic-ref HEADजैसा सुझाव दिया गया एक और जवाब काम कर गया।
माक्र्स जूनियस ब्रूटस

2
डाउनवोट, हम केवल वर्तमान शाखा को स्टडआउट के रूप में चाहते हैं, सभी शाखाएं नहीं
अलेक्जेंडर मिल्स

4656

सूचीबद्ध वर्तमान शाखा को प्रदर्शित करने के लिए, सूचीबद्ध अन्य शाखाओं के बिना, आप निम्न कार्य कर सकते हैं:

git rev-parse --abbrev-ref HEAD

संदर्भ:


132
@ क्रिसहेल्सन, क्योंकि यह सभी शाखाओं की लंबी सूची के बजाय केवल वर्तमान शाखा को प्रदर्शित करता है।
अवकर

73
एक अच्छा, दुख की बात है कि यह काम नहीं करता है यदि आप 'अलग' राज्य में हैं (यह सिर्फ 'हेड' का उत्पादन करता है, जो पूरी तरह से बेकार है)।
कार्लोस कैंपडरो

34
मुझे अनुमान है कि अगर आप 'अलग-थलग पड़े हुए' राज्य में हैं, तो शाखा का कोई git branchपता नहीं चलता है * (no branch), क्योंकि यह दिखाता है , जो बेकार भी है ...
कार्लोस कैंपड्रे

76
"git प्रतीकात्मक- ref --short HEAD" भी इसी उद्देश्य के लिए काम करता है
dusktreader

22
git rev-parse --abbrev-ref HEAD 2>/dev/null / Dev / null भाग आपको एक त्रुटि देखने से रोकता है यदि आपने अभी एक नया भंडार बनाया है जो अभी तक HEAD नहीं हुआ है।
पाराडाईस्टसाउब

523

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

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

git symbolic-ref --short HEAD

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

git rev-parse --abbrev-ref HEAD

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

ध्यान दें:

पहले वाले क्लाइंट पर, यह काम करने लगता है:

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

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


7
अन्य सभी उत्तरों के अनुसार, यह तब काम नहीं करता है जब आप 'अलग-थलग
पड़ने

51
@ CarlosCampderrós: ​​यदि आप अलग राज्य में हैं, तो वर्तमान शाखा जैसी कोई चीज नहीं है। आखिरकार, आप जो प्रतिबद्ध हैं, वह शून्य, एक या एक से अधिक शाखाओं द्वारा पहुंच योग्य हो सकता है।
फ्लिमैन

2
यह खाली git रिपॉजिटरी में समस्या पैदा करता है जब कोई भी HEAD नहीं है
Arne

8
जब आप अलग किए गए सिर पर होते हैं तो git संस्करण 2.4.4 git rev-parse --abbrev-ref HEADदिखाता है HEAD
पीटर

सबसे अच्छा जवाब अभी भी है git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" क्योंकि यह एक स्ट्रिंग की तरह प्रदर्शित होगा HEAD detached at a63917fजब अलग राज्य में, अन्य उत्तरों के विपरीत जो या तो कुछ भी नहीं दिखाते हैं या हेड। यह महत्वपूर्ण है।
बर्नार्ड

264

अपने स्वयं के संदर्भ के लिए (लेकिन यह दूसरों के लिए उपयोगी हो सकता है) मैंने इस धागे में उल्लिखित अधिकांश (मूल कमांड लाइन) तकनीकों का अवलोकन किया, जिनमें से प्रत्येक का उपयोग कई मामलों में किया गया: 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)
    • submodule: (HEAD detached at 285f294)
    • सामान्य अलग सिर: (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
    • submodule: # HEAD detached at 285f294
    • सामान्य अलग सिर: # HEAD detached at 285f294
  • git describe --all
    • स्थानीय शाखा: heads/master
    • दूरस्थ ट्रैकिंग शाखा (सिंक में): heads/master(नोट: नहीं remotes/origin/master )
    • दूरस्थ ट्रैकिंग शाखा (सिंक में नहीं): remotes/origin/feature-foo
    • टैग: v1.2.3
    • submodule: remotes/origin/HEAD
    • सामान्य अलग सिर: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • स्थानीय शाखा: ref: refs/heads/master
    • submodule: cat: .git/HEAD: Not a directory
    • अन्य सभी उपयोग के मामले: संबंधित प्रतिबद्ध की SHA
  • git rev-parse --abbrev-ref HEAD
    • स्थानीय शाखा: master
    • अन्य सभी उपयोग के मामले: HEAD
  • git symbolic-ref --short HEAD
    • स्थानीय शाखा: master
    • अन्य सभी उपयोग के मामले: fatal: ref HEAD is not a symbolic ref

(FYI यह git संस्करण 1.8.3.1 के साथ किया गया था)


6
संक्षेप में, कोई भी ऐसा नहीं करता है जो मैं हाथ से कर सकता हूं।
bukzor

6
यह मेरे लिए काफी मददगार git describe --all --exact-match 2>/dev/null | sed 's=.*/=='था : मेरे लिए सबसे अच्छा उपाय था (टैग्स और ब्रांच हेड्स के अच्छे नाम, रैंडम डिटैक्ड हेड्स के लिए कोई आउटपुट नहीं।
एलेक्स डुप्यू

1
हालाँकि, मैंने अभी पता लगाया है कि git describeजब एक ही प्रतिबद्ध का उल्लेख करने वाली कई शाखाएँ होती हैं, तो प्रयोग करने में गंभीर विफलता होती है, उदाहरण के लिए git checkout -b foo- यह उनमें से एक का उपयोग मनमाने ढंग से करता है (ऐसा लगता है कि शायद सबसे हाल ही में बनाया गया है)। मैं फ़िल्टर किए गए आउटपुट का उपयोग करने के लिए अपनी रणनीति बदलूंगा git branchऔर केवल तभी उपयोग कर सकता हूं git describeजब परिणाम एक अलग सिर के बारे में कुछ हो।
एलेक्स डुप्यू

दरअसल, मुझे git branch --no-colorयह सुनिश्चित करने के लिए उपयोग करने की आवश्यकता है कि फ़ाइल नाम कष्टप्रद टर्मिनल एस्केप कोड से मुक्त है।
एलेक्स डुप्यू

2
यह वास्तव में मेरे लिए एक से अधिक बार मददगार रहा है, इतना गहन होने के लिए धन्यवाद!
ऐलिस परसेल

153

2.22 संस्करण के रूप में आप बस इस्तेमाल कर सकते हैं:

git branch --show-current

प्रति आदमी पृष्ठ के अनुसार:

वर्तमान शाखा का नाम प्रिंट करें। अलग राज्य में, कुछ भी नहीं छपा है।


2
हां, मैंने उस पृष्ठ की टिप्पणियों में पिछले मार्च का उल्लेख किया है: stackoverflow.com/questions/6245570/… । और stackoverflow.com/a/55088865/6309 में
वॉन

5
कम से कम यह उल्लेख अलग राज्य में काम नहीं करता है । बस कुछ ही घंटों के लिए संकलन करने के लिए 2.22 git हो रही खो घंटे ...
डेविड Deprost 4

136

एक और विकल्प:

git name-rev --name-only HEAD

इसके साथ ही इसे पुनः प्राप्त किया जा सकता हैecho ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
एंटोनी

12
यह काम नहीं करता है अगर HEAD मास्टर और फीचर शाखा (जैसे मर्ज के दौरान) के लिए समान है। यदि सुविधा शाखा पर अमल किया जाता है तो भी यह 'मास्टर' देता है।
ओरेस्ट हेरा

1
git checkout master && git name-rev --name-only HEAD # ac-187यह अपेक्षित रूप से काम नहीं करता है
अलेक्जेंडर एबास्किन

मैं विलय से ठीक पहले इसे एक चर में सहेजता हूं और अगर मैं एक विशेष प्रतिबद्धता की जांच करूं तो मेरे हेड को डी-अटैच हो सकता है। इन मामलों में यह ठीक काम करता है।
ईशान सेजवाल

4
मैं जेनकींस पाइपलाइन से यह कर रहा हूं। इसलिए यह समय मेरे लिए सबसे अच्छा जवाब है। कर git branch --listबस कहता है * (HEAD detached at 7127db5)। कर रहा है git rev-parse --abbrev-ref HEADबस HEADइतना कहते हैं और इतने पर।
मिग 82

91

बहुत सरल है, मुझे यह एक लाइनर (बाश) में मिला

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

(क्रेडिट: लिमिटेड प्रायश्चित)

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

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

8
बहुत सारे स्लैश! :) sed -n 's/\* //p'चाल है। हालांकि मैं पागल की ओर जाता हूं इसलिए मैं इसके साथ लंगर डालूंगा sed -n 's/^\* //p'
मार्क रीड

64

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

$ git status

और आपको कुछ पाठ दिखाई देंगे, जिनके बीच कुछ इस तरह है:

...
On branch master
...

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


2
आप क्या करना चाहते हैं, इसके आधार पर, आप git statusआउटपुट की केवल पहली पंक्ति का उपयोग कर सकते हैं और प्राप्त कर सकते हैं git status | head -1जिसके साथ कुछ मिलता है # On branch master। मुझे यकीन है कि संस्करण अंतरों को भी हिसाब देना होगा।
जोशुआ पिंटर

@ जोशपिटर्न: आप इसका उपयोग भी कर सकते हैं git status | grep 'On branch', जिसका प्रभाव समान होना चाहिए (होना चाहिए, इसका मतलब यह नहीं है कि यदि आपके Git का संस्करण इसे अलग तरीके से प्रदर्शित करता है)। या git branch | grep '*', जो इसकी शुरुआत में एक स्टार के साथ शाखा का नाम दिखाएगा।
ताडेक

हां, यह भी काम करता है और अधिक लचीला हो सकता है। एक देव रेल एप्लिकेशन में सिर्फ शाखा का नाम दिखाने के लिए मेरा अंतिम परिणाम था:<tick>git status | head -1<tick>.gsub('# On branch ', '')
यहोशू Pinter

1
git statusमान को वापस करने के लिए एक लंबा समय ले सकता है अगर बहुत सारी फाइलें प्रबंधित की जा रही हैं।
द टिन मैन

हाँ, यदि आप एक वेबपेज पर शाखा को प्रिंट करना चाहते हैं, उदाहरण के लिए, git statusपूरे पृष्ठ की पीढ़ी के समय को टैंक कर सकते हैं।
आर्टेम रसाकोवस्की

36
git symbolic-ref -q --short HEAD

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


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

1
यह एक अच्छा समाधान है क्योंकि -q विकल्प के साथ यह "डिटैच हेड" स्थिति में एक त्रुटि कोड देता है, लेकिन स्टैडर के लिए कुछ भी प्रिंट नहीं करता है।
हॉलिडेव

यह एकमात्र उपाय है जो मेरे लिए एक ताजा रेपो पर बिना किसी कमिट के काम करता है
kundasaba

26
git branch | grep -e "^*" | cut -d' ' -f 2

केवल शाखा का नाम दिखाएगा


यदि आपकी शाखा कुछ इस तरह दिखती है तो "* (HEAD को SUM_BRANCH_01 पर अलग किया गया"), फिर यह "git शाखा | grep -e" ^ * | | कट -d '' -f 5 | cut -d ')' -f 1 'आज़माएँ। "
डायलन कप

मैंने वर्तमान शाखा नाम प्राप्त करने के लिए बस यही सटीक स्क्रिप्ट बनाई है। मुझे लगा कि यह भिन्नता के साथ मदद कर सकता है।
4

25

git branch केवल वर्तमान शाखा का नाम दिखाएं।

जबकि गिट शाखा आपको सभी शाखाएं दिखाएगी और तारांकन के साथ वर्तमान को उजागर करेगी, बहुत सारी शाखाओं के साथ काम करने पर यह बहुत बोझिल हो सकती है।

वर्तमान में केवल उसी शाखा को दिखाने के लिए, जिसका उपयोग करें:

git rev-parse --abbrev-ref HEAD

यह ci और अन्य बिल्ड टूल्स के लिए बहुत अच्छा है!
phouse512

एक स्क्रिप्ट में इसका उपयोग करने के लिए सबसे अच्छा उत्तर
बेन केइल

1
@DylanNicholson git branch --containsकभी-कभी एक से अधिक शाखाओं को सूचीबद्ध करती है।
जो चाको

22

ओलिवर रिफेलो के समान लंबाई का एक कमांड लाइन समाधान मिला , जो अच्छे ओल का उपयोग कर रहा है:

git branch | awk '/^\*/{print $2}'

awkपढ़ता है कि " {}रेगेक्स से मेल खाते लाइनों में सामान करते हैं "। डिफ़ॉल्ट रूप से यह व्हाट्सएप-सीमांकित क्षेत्रों को मानता है, इसलिए आप दूसरा प्रिंट करते हैं। यदि आप मान सकते हैं कि केवल आपकी शाखा के साथ लाइन * है, तो आप ^ को छोड़ सकते हैं। आह, बैश गोल्फ!


19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch

18

जीआईटी-जागरूक शेल प्रॉम्प्ट का उपयोग क्यों न करें, जो आपको वर्तमान शाखा का नाम बताएगा? git statusभी मदद करता है।


कैसे git-prompt.sh से contrib/यह करता है (Git संस्करण 2.3.0), के रूप में के रूप में परिभाषित __git_ps1सहायक समारोह:

  1. सबसे पहले, विशेष मामला है, तो है रिबेस प्रगति में पता चला है। गिट इसे बनाने के लिए रिनासेज प्रक्रिया के दौरान अनाम शाखा (अलग किए गए हेड) का उपयोग करता है, और मूल शाखा कहीं और बचाई जाती है।

  2. यदि .git/HEADफ़ाइल एक प्रतीकात्मक लिंक (एक बहुत ही दुर्लभ मामला, गिट के प्राचीन इतिहास से) है, तो यह उपयोग करता हैgit symbolic-ref HEAD 2>/dev/null

  3. और, यह .git/HEADफ़ाइल पढ़ता है। अगले चरण इसकी सामग्री पर निर्भर करते हैं:

    • यदि यह फ़ाइल मौजूद नहीं है, तो कोई वर्तमान शाखा नहीं है। यह आमतौर पर तब होता है जब रिपॉजिटरी नंगे होती है।

    • यदि यह 'ref: 'उपसर्ग से शुरू होता है , तो .git/HEADसिम्फ़र (प्रतीकात्मक संदर्भ) है, और हम सामान्य शाखा पर हैं। पूरा नाम पाने के लिए इस उपसर्ग को पट्टी करें, और refs/heads/वर्तमान शाखा का संक्षिप्त नाम पाने के लिए पट्टी करें:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • यदि यह इसके साथ शुरू नहीं होता है 'ref: ', तो इसे कुछ हद तक सीधे इंगित करते हुए HEAD (अनाम शाखा) को अलग कर दिया जाता है। git describe ...मानव-पठनीय रूप में वर्तमान प्रतिबद्ध लिखने के लिए उपयोग करें ।

मुझे आशा है कि वह मदद करेंगे।


3
और यदि आप एक git- जागरूक शेल प्रॉम्प्ट विकसित कर रहे हैं, तो आपको यहां कौन से उत्तर का उपयोग करना चाहिए? सभी तरह से नीचे कछुए।
ट्रिपल


4
रिकॉर्ड के लिए कौन सा ऐसा प्रतीत होता है git describe --contains --all HEADजो मैं वर्तमान में इस पृष्ठ पर नहीं देखता हूं। जैसा कि मुझे यकीन है कि आप जानते हैं, StackOverflow पर केवल-लिंक उत्तरों की अनुशंसा नहीं की जाती है।
ट्रिपल

2
@tripleee: मैंने एक स्पष्टीकरण जोड़ा है कि git-prompt.sh(उर्फ __git_ps1) यह कैसे करता है ...
जैकब नारpleबस्की

17

गिट स्थिति के लिए एक कम शोर संस्करण चाल होगा

git status -bsuno

यह प्रिंट करता है

## branch-name

1
## विकसित ... मूल / विकसित
कल्पेश सोनी

16

क्षमा करें, यह एक और कमांड-लाइन उत्तर है, लेकिन यही वह चीज है जिसकी मुझे तलाश थी जब मुझे यह प्रश्न मिला और इनमें से कई उत्तर मददगार थे। मेरा समाधान निम्नलिखित बैश शेल फ़ंक्शन है:

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

यह मुझे हमेशा मानव-पठनीय और तर्क के रूप में सीधे प्रयोग करने योग्य दोनों के लिए कुछ देना चाहिए git checkout

  • स्थानीय शाखा पर: feature/HS-0001
  • एक टैग किए गए कमिट पर (अलग किया गया): v3.29.5
  • एक दूरस्थ शाखा पर (अलग, टैग नहीं किया गया): SHA1
  • किसी भी अन्य अलग किए गए वचन पर: SHA1

1
इसे पोस्ट करने के लिए धन्यवाद, किसी भी अन्य उत्तर के बारे में परवाह नहीं थी जो हमेशा तर्क के रूप में उपयोग करने योग्य कुछ का उत्पादन करता था git checkout
zwol

15

आप निम्न कार्यशील कमांड पर git bash का उपयोग कर सकते हैं

git status -b

यह आपको बताएगा कि आप किस शाखा में हैं, कई कमांड हैं जो उनमें से कुछ उपयोगी हैं

-s

शॉर्ट-प्रारूप में आउटपुट दें।

-b --branch शाखा और ट्रैकिंग जानकारी को लघु-प्रारूप में भी दिखाएं।

- चीनी मिट्टी के बरतन [=] स्क्रिप्ट के लिए एक आसान-से-पार्स प्रारूप में आउटपुट दें। यह लघु आउटपुट के समान है, लेकिन Git संस्करणों में स्थिर रहेगा और उपयोगकर्ता कॉन्फ़िगरेशन की परवाह किए बिना। विवरण के लिए नीचे देखें।

संस्करण पैरामीटर का उपयोग प्रारूप संस्करण को निर्दिष्ट करने के लिए किया जाता है। यह वैकल्पिक है और मूल संस्करण v1 प्रारूप में चूक है।

- लंबे आउटपुट को लॉन्ग-फॉर्मेट में दें। यह डिफ़ॉल्ट है।

-v --verbose जिन फ़ाइलों को बदला गया है उनके नाम के अलावा, उन पाठ परिवर्तन को भी दिखाते हैं जो प्रतिबद्ध होने के लिए हैं (जैसे, git diff --cached के आउटपुट की तरह)। यदि -v दो बार निर्दिष्ट किया गया है, तो कार्यशील पेड़ में उन परिवर्तनों को भी दिखाएं जिन्हें अभी तक मंचित नहीं किया गया है (जैसे, गिट भिन्न के उत्पादन की तरह)।


14
git status 

परिवर्तनों के साथ शाखा का नाम भी देगा।

जैसे

>git status
On branch master // <-- branch name here
.....

13

समय के साथ, हमारे पास शाखाओं की वास्तव में लंबी सूची हो सकती है।

जबकि कुछ अन्य समाधान महान हैं, यहाँ मैं यही करता हूं (याकूब के उत्तर से सरलीकृत):

git branch | grep \*

अभी,

git status

काम करता है, लेकिन केवल अगर कोई स्थानीय परिवर्तन हैं


13

मैं इन दोनों आदेशों में से किसी का उपयोग करने की सलाह देता हूं।

git branch | grep -e "^*" | cut -d' ' -f 2

या

git status | sed -n 1p | cut -d' ' -f 3

या (अधिक क्रिया)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p


12

नेटबीन्स में, सुनिश्चित करें कि संस्करण संबंधी एनोटेशन सक्षम हैं (देखें -> संस्करण देखें लेबल)। फिर आप प्रोजेक्ट नाम के आगे शाखा का नाम देख सकते हैं।

http://netbeans.org/bugzilla/show_bug.cgi?id=213582


वर्जनिंग एनोटेशन सक्षम होने के बाद, आपको केवल वर्तमान शाखा को देखने के लिए प्रोजेक्ट (या फ़ाइल, या पसंदीदा) फ़ोल्डर पर अपने माउस को हॉवर करना होगा।
idllaar

12

इस बारे में क्या?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"

1
बहुत बेहतर जवाब क्योंकि यह अलग-थलग पड़ने वाले मामले को अच्छी तरह से संभालता है।
पाट

2
लगता है कि आप का उपयोग किया जाना चाहिए () नहीं {} गिट कमांड लपेटने के लिए
पैट

@Pat इसके लिए एक अलग उपखंड को स्पॉन करने की आवश्यकता नहीं है, जैसा कि () करेगा। {* ठीक है, सिवाय आपको जोड़ने की आवश्यकता है; } से पहले या नई लाइन। वास्तव में, आप केवल {} को पूरी तरह से छोड़ सकते हैं जब तक कि आपको कमांड्स को समूह बनाने की आवश्यकता न हो।
ऐज

क्या symbolic-refभाग को भी --shortशाखा के साथ उपसर्ग से बचने की आवश्यकता नहीं है refs/heads/?
आरजेपी

11

मेरे पास एक सरल स्क्रिप्ट है जिसे git-cbr( वर्तमान शाखा ) कहा जाता है जो वर्तमान शाखा नाम को प्रिंट करता है।

#!/bin/bash

git branch | grep -e "^*"

मैंने इस स्क्रिप्ट को एक कस्टम फ़ोल्डर ( ~/.bin) में रखा है। फ़ोल्डर में है $PATH

इसलिए अब जब मैं एक git रेपो में हूं, तो मैं केवल git cbrवर्तमान शाखा का नाम प्रिंट करने के लिए टाइप करता हूं ।

$ git cbr
* master

यह काम करता है क्योंकि gitकमांड अपना पहला तर्क लेता है और एक स्क्रिप्ट चलाने की कोशिश करता है जो के नाम से जाती है git-arg1। मसलन, git branchस्क्रिप्ट git-branchआदि को चलाने की कोशिश करता है ।


11

आप अपना git-ब्रांच नाम दिखाने के लिए अपने bash आउटपुट को स्थायी रूप से सेट कर सकते हैं। यह बहुत आसान है जब आप विभिन्न शाखाओं के साथ काम करते हैं, तो $ git statusहर समय टाइप करने की आवश्यकता नहीं होती है । गितुब रेपो गित-सजग-शीघ्र

अपना टर्मिनल (ctrl-alt-t) खोलें और कमांड दर्ज करें

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git

अपने .bashrc को sudo nano ~/.bashrcकमांड (Ubuntu के लिए) के साथ संपादित करें और निम्नलिखित को शीर्ष पर जोड़ें:

export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"

फिर कोड पेस्ट करें

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

उसी फ़ाइल के अंत में आपने इंस्टालेशन कोड को पहले से चिपकाया था। यह आपको रंगीन आउटपुट देगा:यहां छवि विवरण दर्ज करें


10

निम्न शेल कमांड आपको वह शाखा बताता है जो आप वर्तमान में हैं।

git branch | grep ^\*

जब आप उस लंबी कमांड को हर बार टाइप नहीं करना चाहते हैं जो आप शाखा को जानना चाहते हैं और आप बैश का उपयोग कर रहे हैं, तो कमांड को एक छोटा उपनाम दें, उदाहरण के लिए उपनाम cb, जैसे।

alias cb='git branch | grep ^\*'

जब आप शाखा मास्टर होते हैं और आपका संकेत होता है $, तो आप * masterनिम्नानुसार प्राप्त करेंगे।

$ cb
* master

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें। - समीक्षा से
रशवन एल

1
आप ऐसा क्यों सोचते हैं?
mrrusof

आपको ओपी के लिए अपनी पोस्ट पर टिप्पणी और वर्णन करना चाहिए, इस तरह से आपके पोस्ट को समझना आसान हो जाएगा।
राशवन एल

1
एकदम सही समझ में आता है।
मृत्सोफ

1
यदि आप zsh का उपयोग करते हैं तो आपको एकल उद्धरणों में grep regex को लपेटना होगा:git branch | grep '^\*'
aaarrghgh

9

अलग किए गए सिर पर शाखा का नाम या SHA1 या तो लौटाता है:

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

यह @ dmaestro12 के उत्तर और टैग समर्थन के बिना एक संक्षिप्त संस्करण है।


8
बेहतर:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
blueyed

8

यदि आप वास्तव में अंतिम शाखा / टैग को अलग-थलग पड़ने की स्थिति में चाहते हैं।

git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

अद्यतन यह अच्छा है अगर आपके पास है और जाग से डर नहीं रहे हैं।

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'

के rev | cut -d' ' -f1| revसाथ सरलीकृत किया जा सकता हैawk '{print $NF}'
स्टीव बुज़ोनास

1
हालांकि यह मूर्खतापूर्ण नहीं है, क्योंकि आप हैश द्वारा किसी विशेष संशोधन की जांच कर सकते हैं, ताकि रिफ्लेग सिर्फ checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9यह दिखाता है कि यह अभी भी एक उपयोगी चाल है जो कुछ मामलों को अस्वीकार करने में मदद कर सकता है।
एलेक्स डुप्यूय

1
आगे छोटाgit reflog | awk '$3=="checkout:" {print $NF; exit}'
jthill

6

मुझे पता है कि यह देर से है, लेकिन एक टर्मिनल / मैक पर, टर्मिनल से आप निम्नलिखित का उपयोग कर सकते हैं।

git status | sed -n 1p

स्पष्टीकरण:

git स्टेटस -> वर्किंग ट्री स्टेटस
sed -n 1p -> को स्टेटस बॉडी से पहली लाइन मिलती है

उपरोक्त कमांड का जवाब निम्नानुसार होगा:

"On branch your_branch_name"

2
head -1सामान्य तरीका होगा
bukzor

5

आप GIT_BRANCH वैरिएबल का भी उपयोग कर सकते हैं जैसा कि यहाँ दिखाई देता है: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Git plugin कई पर्यावरण चर सेट करता है जिन्हें आप अपनी स्क्रिप्ट में उपयोग कर सकते हैं:

GIT_COMMIT - वर्तमान का SHA

GIT_BRANCH - वर्तमान में उपयोग की जा रही शाखा का नाम, जैसे "मास्टर" या "मूल / foo"

GIT_PREVIOUS_COMMIT - एक ही शाखा से पिछली निर्मित कमेटी का SHA (वर्तमान शाला में पहली शाखा में निर्माण)

GIT_URL - रिपॉजिटरी रिमोट URL

GIT_URL_N - 1 से अधिक रीमोट होने पर रिपॉजिटरी दूरस्थ URL, जैसे GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - कमेटी / लेखक ईमेल

GIT_COMMITTER_EMAIL - कमेटी / लेखक ईमेल


5

PS1मैक का उपयोग करके इसे जोड़ें :

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

ऊपर दिए गए आदेश को चलाने से पहले:

यहां छवि विवरण दर्ज करें

उस आदेश को चलाने के बाद:

यहां छवि विवरण दर्ज करें

चिंता मत करो, अगर यह जीआईटी रिपॉजिटरी नहीं है, तो यह त्रुटि प्रदर्शित नहीं करेगा [-d .git]जिसके कारण यह जांचता है कि .gitफ़ोल्डर मौजूद है या नहीं।

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