Git में सिर्फ वर्तमान शाखा दिखाएं


356

मैंने इसके लिए एक विशेष Git कमांड की तलाश की, लेकिन मुझे एक नहीं मिला। निम्नलिखित में से कुछ छोटा या तेज है?

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

1
मुझे लगता है कि वर्तमान शाखा को प्राप्त करने का यह संभव तरीका है
एइमांतास


@ChandrayyaGK: नहीं, क्योंकि दूसरा प्रश्न इसे आपके IDE से करने के बारे में है। (कई उत्तर कमांड-लाइन उपयोग के लिए हैं, इसलिए यह देखने लायक है, लेकिन यह एक उचित डुप्लिकेट नहीं है, और उन उत्तरों को शायद यहां पर माइग्रेट किया जाना चाहिए, अगर कोई ऐसा है जो यहां पहले से ही महत्वपूर्ण मूल्य जोड़ रहा है।)
ट्रिपल

3
@Torek - यहाँ Git द्वारा एक और सरल कार्य कठिन बना दिया गया है।
jww

@ChandrayyaGK द्वारा पोस्ट किए गए लिंक का शीर्ष उत्तर इससे बहुत धीमा है!
कोलम भंडाल

जवाबों:


659
$ git rev-parse --abbrev-ref HEAD
master

यह Git 1.6.3 या नए के साथ काम करना चाहिए।


Git-1.6.2.5 के साथ मेरे लिए भी काम नहीं करता है। git Rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (यानी रेव-पारबेट स्वीकार नहीं करता है --abbrev-ref (मैन पेज में भी नहीं)
जेसनवॉफ

1
जेसनवूफ, मेरे लिए 1.6.4.2 में काम करता है, यह देखने के लिए चेंगलॉग की जरूरत है कि वास्तव में ऐसा कब हुआ? ;-)
माइकल क्रेलिन - हैकर

7
जहां तक ​​मैं गिट लॉग से बता सकता हूं, इस फीचर को 2009-04-20 में मर्ज कर दिया गया था और 1.6.3 वर्जन के साथ रिलीज किया गया था।
इल सिप

1
मैं वास्तव में यह भी समझना चाहूंगा। यह वास्तव में कैसे काम करता है? इसके अलावा, ऐसा लगता है कि --abbrev-ref किसी अन्य तर्क के लिए कुछ भी वापस नहीं करता है। यह संभवतः तर्क के रूप में HEAD नहीं हो सकता है।
सेटाफायर

6
ध्यान दें कि यदि आप एक अलग प्रतीकात्मक संदर्भ में हैं (इसका मतलब यह हो सकता है कि आप एक शाखा में हैं, लेकिन पिछली प्रतिबद्ध जांच की गई है), यह आदेश केवल वापस आएगा HEAD, अपेक्षित नहींmaster
unifreak

129

Git 1.8.1 में आप "--short" विकल्प के साथ git प्रतीकात्मक-रेफ कमांड का उपयोग कर सकते हैं :

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

धन्यवाद। उपनाम बनाया गया।
माइकल बूर

7
स्वीकार किए गए उत्तर IMO से बेहतर है, क्योंकि यह बिना किसी कमिट के
रिपोज

2
fatal: ref HEAD is not a symbolic refट्रैविसीआई बिल्ड के एक भाग के रूप में इसे चलाते समय त्रुटि प्राप्त करना
kmanzana

जीआईटी 1.9.1 `` `संस्करण संस्करण 1.9.1 में काम करने के लिए प्रतीत नहीं किया गया था। घातक: रेफ HEAD एक प्रतीकात्मक रेफरी नहीं
रिचर्ड

मेरे लिए काम करता है: git संस्करण 2.16.2.windows.1
टैग मार्क

59

2.22 Git (Q2 2019) के साथ, आपके पास एक सरल दृष्टिकोण होगा git branch --show-current:।

डैनियल्स उमनकोविस ( ) द्वारा देखें 0ecb1fc (25 अक्टूबर 2018 )(द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 3710f60 , 07 मार्च 2019)umanovskis
gitster

branch: --show-currentप्रदर्शन विकल्प प्रस्तुत करना

जब बुलाया जाता है --show-current, git branchतो वर्तमान शाखा का नाम प्रिंट करेगा और समाप्त करेगा।
केवल वास्तविक नाम ही मुद्रित होता है, बिना refs/heads
अलग राज्य में, कुछ भी आउटपुट नहीं है।

स्क्रिप्टिंग और इंटरैक्टिव / सूचनात्मक उपयोग दोनों के लिए इरादा।
इसके विपरीत git branch --list, केवल शाखा नाम प्राप्त करने के लिए किसी फ़िल्टरिंग की आवश्यकता नहीं होती है।


15
अंत में, ऐसा लगता है कि यह शुरू से ही होना चाहिए था, जोड़ा गया है!
dtasev

27

आप के उत्पादन में रुचि हो सकती है

git symbolic-ref HEAD

विशेष रूप से, आपकी आवश्यकताओं और लेआउट के आधार पर आप करना चाह सकते हैं

basename $(git symbolic-ref HEAD)

या

git symbolic-ref HEAD | cut -d/ -f3-

और फिर फिर से .git/HEADफ़ाइल है जो आपके लिए भी रूचिकर हो सकती है।


2
आप छोटा कर सकते हैं git rev-parse --symbolic-full-nameकरने के लिए git symbolic-ref
15:13

1
आपको उपयोग करने की आवश्यकता नहीं है basenameया cut; उपयोग करें BR=${BR#refs/heads/}(जहाँ BR आपके द्वारा सहेजे गए चर का नाम है git symbolic-ref HEAD)।
जकुब नारबस्की

जकूब, निश्चित रूप से नहीं, बशर्ते आपके पास चर में आउटपुट हो।
माइकल क्रेलिन - हैकर

5
git symbolic-ref --short HEADभी कर सकते हैं
फहद सिद्दीकी

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

13

मैं जो बता सकता हूं, उसमें Git में केवल वर्तमान शाखा को मूल रूप से दिखाने का कोई तरीका नहीं है, इसलिए मैं उपयोग कर रहा हूं:

git branch | grep '*'

3
जबकि वह GNU कोरुटिल्स के साथ काम करता है, grep '*'नाममात्र एक वाक्यविन्यास त्रुटि है। आप शायद git branch | sed -n 's/^\* //p'वैसे भी चाहते हैं । या वास्तव में, ओपी पहले स्थान पर क्या पोस्ट करता है, जो एक ही चीज़ पर निर्भर करता है।
ट्रिपल

@tripleee क्या आप मुझे इस बारे में बता सकते हैं कि grep '*'नाममात्र का सिंटैक्स त्रुटि क्यों है?
जेके एबीसी

1
@JKABC: @tripleee का मतलब यह है कि '*'यह एक नियमित अभिव्यक्ति है और जैसे कि यह अमान्य है। आप शायद का उपयोग करना चाहते '[*]'हैं (अर्थात, चरित्र *के बजाय ऑपरेटर "शून्य या अधिक बार")।
जॉन्डोडो

2
@johndodo स्पष्टीकरण के लिए धन्यवाद, यह अब मेरे लिए समझ में आता है। मैं आमतौर पर से यह करनाgrep '\*'
जेके एबीसी

2
केवल शाखा का नाम काट सकते हैंgit branch | grep "*" | cut -d' ' -f2
फहद सिद्दीकी

6

मुझे लगता है कि यह त्वरित होना चाहिए और इसका उपयोग पायथन एपीआई के साथ किया जा सकता है:

git branch --contains HEAD
* master

4
यह वर्तमान शाखा का उत्पादन नहीं करता है। यह उन शाखाओं की सूची को आउटपुट करता है, जो प्रतिबद्ध HEAD बिंदुओं पर इंगित करने के लिए होती हैं। और हाँ, यह ओवरलैप हो सकता है, लेकिन इससे गलतफहमी हो सकती है। जहां आप हैं वहां से एक नई शाखा बनाएं और अपनी पंक्ति को पुन: प्रयास करें: दो शाखाएं। प्रश्न " बस वर्तमान शाखा " के लिए पूछता है ।
रोमेनवेलरी

4

मैं उपयोग कर रहा हूँ

/etc/bash_completion.d/git

यह Git के साथ आया और शाखा नाम और तर्क पूर्ण होने के साथ एक संकेत देता है।


इस प्रॉम्प्ट को कैसे सक्रिय किया जा सकता है?
एलेक्स

Ubuntu में, $ source /etc//bash_completion.d/git-prompt फ़ाइल को अलग-अलग सिस्टम पर अलग-अलग नाम दिया जा सकता है। (नोट: sourceकीवर्ड .बैश में सिर्फ (डॉट) के समान है ।)
माइकल

1

यह छोटा नहीं है, लेकिन यह अलग शाखाओं के साथ भी संबंधित है:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

1

पूर्णता के लिए, echo $(__git_ps1)लिनक्स पर, कम से कम, आपको कोष्ठकों से घिरे वर्तमान शाखा का नाम देना चाहिए।

यह उपयोगी हो सकता है कुछ परिदृश्य हैं क्योंकि यह एक Git कमांड नहीं है (जबकि Git पर निर्भर करता है), विशेष रूप से वर्तमान शाखा को प्रदर्शित करने के लिए अपने Bash कमांड प्रॉम्प्ट को सेट करने के लिए

उदाहरण के लिए:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>

आइटम एक उपनाम है और इंटरेक्टिव शेल स्क्रिप्ट के लिए मौजूद होना चाहिए। यह शायद किसी भी प्रकार की स्क्रिप्ट के लिए अनुपस्थित है।
अलेक्जेंडर स्टोह

0

किसी को यह ( ) सहायक मिल सकता है । वर्तमान शाखा को * चिह्न के साथ दिखाया गया है।git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.