दिलचस्प पोस्ट
दस्तावेज़ों को कैसे ठीक से मर्ज करना है? आवेदन नियुक्त करने के लिए iPhone का उचित उपयोग MongoDB परमाणु "खोज या क्रय": ढूंढें, यदि कोई भी न हो तो सम्मिलित करें, लेकिन अपडेट न करें टर्मिनल से mvim (मैकविम) को कैसे चलाया जाता है? डेटा फ्रेम से विशिष्ट कॉलम निकाले जा रहे हैं गैर-आदिम लांग मान 127 और 128 की तुलना करें आपके द्वारा देखी गई विस्तार विधियों का सर्वोत्तम या सबसे दिलचस्प उपयोग क्या है? उत्पादन में डॉकर कंटेनरों को कैसे स्केल किया जाए लेनदेन या सेव चेंज (झूठे) और AcceptAllChanges () का उपयोग करना? पूरक रंग की गणना करने के लिए जेएस फ़ंक्शन? आप जावा उप-वर्ग में किसी विधि की दृश्यता को कम क्यों नहीं कर सकते? File_get_contents के लिए विकल्प? मैटप्ललिब / पायथन में जेपीजी की छवि के शीर्ष पर आप एक स्कैटर प्लॉट को सीधे कैसे ओवरले करते हैं? किसी शब्द / स्ट्रिंग को बाहर करने के लिए एक नियमित अभिव्यक्ति एसक्यूएल सर्वर मैनेजमेंट स्टूडियो 2012 में ऑटो कुंजी बढ़ाना प्राथमिक कुंजी

गिट में मौजूदा शाखा नाम कैसे प्राप्त करें?

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

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

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

Solutions Collecting From Web of "गिट में मौजूदा शाखा नाम कैसे प्राप्त करें?"

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

 git rev-parse --abbrev-ref HEAD 

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

संदर्भ:

  • गिट में वर्तमान शाखा दिखाएं (सितंबर 200 9)

आपके पास 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

मेरे अपने संदर्भ के लिए (लेकिन यह दूसरों के लिए उपयोगी हो सकता है) मैंने इस थ्रेड में उल्लिखित अधिकांश (बुनियादी कमांड लाइन) तकनीकों का एक सिंहावलोकन बनाया है, प्रत्येक कई उपयोग मामलों पर लागू होता है: 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/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

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

एक और विकल्प:

 git name-rev --name-only HEAD 

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

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

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

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

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

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

 $ git status 

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

 ... On branch master ... 

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

 git symbolic-ref -q --short HEAD 

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

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

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

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

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

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

आप काम कर रहे डायरेक्टरी कमांड पर जीआईटी बैश का उपयोग कर सकते हैं जैसा कि अनुसरण करें

 git status -b 

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

 -s 

– शोर्ट शॉर्ट-फॉर्मेट में आउटपुट दें।

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

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

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

– लांग लंबे स्वरूप में आउटपुट दें। यह डिफ़ॉल्ट है

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

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

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

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

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

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

 git branch | grep \* 

अभी व,

 git status 

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

जीआईटी-जागृत शेल प्रॉम्प्ट का उपयोग क्यों नहीं करें, जो आपको वर्तमान शाखा का नाम बताएगा? 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 .git/HEAD symref (प्रतीकात्मक संदर्भ) है, और हम सामान्य शाखा पर हैं। वर्तमान शाखा का संक्षिप्त नाम प्राप्त करने के लिए पूर्ण उपनाम पाने के लिए इस उपसर्ग को पट्टी करें, और refs/heads/

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

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

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

 git branch | grep ^\* 

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

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

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

 $ cb * master 

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

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

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

 #!/bin/bash git branch | grep -e "^*" 

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

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

 $ git cbr * master 

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

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

 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

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

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

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

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

 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\]\$ " 

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

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

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

अपडेट यह आपके लिए अच्छा है अगर आपके पास awk का डर नहीं है।

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

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

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

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

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

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

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

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

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

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

GIT_COMMIT – वर्तमान की शा

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

GIT_PREVIOUS_COMMIT – एक ही शाखा से पिछले निर्मित प्रतिबद्धता के SHA (शाखा में पहले बिल्ड पर वर्तमान एसएचए)

GIT_URL – रिपॉजिटरी दूरस्थ यूआरएल

GIT_URL_N – 1 से अधिक रिमाट्स के लिए रिपाजिटरी दूरस्थ यूआरएल, जैसे GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL – कम्यूटेटर / लेखक ईमेल

GIT_COMMITTER_EMAIL – कम्यूटेटर / लेखक ईमेल

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

 git status | sed -n 1p 

स्पष्टीकरण:

जीआईटी की स्थिति -> काम के पेड़ की स्थिति प्राप्त हो जाती है
sed -n 1p -> स्थिति निकाय से पहली पंक्ति मिलती है

उपर्युक्त कमांड के उत्तर निम्नानुसार दिखेगा:

 "On branch your_branch_name" 

पहले विचारों का उपयोग करना; SHA1 मानते हुए 40 वर्ण हैं; और पीछा संदर्भ (हाँ, डिबग प्रिंट लाइनों को हटा देना चाहिए :-):

 git reflog | awk ' $3 == "checkout:" && (sha == "" || sha == $1 ) { from=$(NF - 2) to=$NF print from, to, length(from) > "/dev/stderr" if (length(from) != 40) { print from ; exit; } sha=substr(from, 1, 7) print sha > "/dev/stderr" } ' 

कच्चे आउटपुट देता है:

 $ git status HEAD detached at 147049c [...] $ ./gime-branch.sh a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40 a47be8d master HEAD^ 6 master 
 git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy 

परिणाम को पेस्टबोर्ड पर सीधे कॉपी करने के लिए शुरुआत के लिए @ ओलिवियर-रिफ्लो के लिए धन्यवाद …

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

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

यह @ dmaestro12 के जवाब का एक छोटा संस्करण है और टैग समर्थन के बिना।