उन शाखाओं को कैसे सूचीबद्ध करें जिनमें किसी दिए गए वचन हैं?


1087

मैं यह कैसे पता लगा सकता हूँ कि कौन सी शाखाएँ किसी दिए गए वचन को शामिल करती हैं? gitkआम तौर पर शाखाओं को सूचीबद्ध करेगा, जब तक कि बहुत सारे न हों, जिस स्थिति में यह सिर्फ "कई (38)" या ऐसा कुछ कहता है। मुझे पूरी सूची जानने की जरूरत है, या कम से कम कुछ शाखाओं में भी कमिटमेंट है।



संबंधित टिप्पणियों के लिए एक समतुल्य प्रश्न के लिए संबंधित प्रश्न: stackoverflow.com/questions/16304574/…
UpAndAdam

जवाबों:


1470

से Git शाखा मैनुअल पृष्ठ :

 git branch --contains <commit>

केवल उन शाखाओं को सूचीबद्ध करें जिनमें निर्दिष्ट प्रतिबद्ध (HEAD यदि निर्दिष्ट नहीं है)। इंप्लाइज --list


 git branch -r --contains <commit>

सूचियाँ रिमोट ट्रैकिंग शाखाओं के रूप में अच्छी तरह से (में उल्लिखित user3941992 के जवाब नीचे) है कि "स्थानीय शाखाओं एक दूरस्थ शाखा के लिए एक सीधा संबंध नहीं है" है।


इस तैयार लेख को भी देखें ।

--containsटैग यह पता लगाने के लिए एक निश्चित हैं तो आपका शाखा में अभी तक में लाया गया है, तो होगा। शायद आपके द्वारा लगाई गई पैच से आपको एक प्रतिबद्ध SHA मिला है, जिसे आपने लागू किया था, या आप यह जांचना चाहते हैं कि क्या आपके पसंदीदा ओपन सोर्स प्रोजेक्ट के लिए प्रतिबद्ध है जो मेमोरी उपयोग को 75% कम करता है।

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <nick@quaran.to>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

ध्यान दें: यदि प्रतिबद्ध एक दूरस्थ ट्रैकिंग शाखा पर है , तो -aविकल्प जोड़ें
(जैसा कि मिक्सीबेल टिप्पणी नीचे दी गई है )

git branch -a --contains <commit>

मैट्रिक्सट्रॉग टिप्पणी करता है कि यह केवल यह दर्शाता है कि कौन सी शाखाएं सटीक प्रतिबद्ध हैं।
आप को पता है जो शाखाओं एक "बराबर" शामिल करना चाहते हैं के लिए प्रतिबद्ध (यानी जो शाखाओं चेरी उठाया कि प्रतिबद्ध है) कि की git cherry:

चूँकि git cherry कमिट id (sha1) के बजाय बदलाव की तुलना करता है , तो आप यह git cherryपता लगाने के लिए उपयोग कर सकते हैं कि क्या आपके द्वारा स्थानीय रूप से बनाई <upstream>गई एक कमिट id के तहत लागू की गई है।
उदाहरण के लिए, यह तब होगा जब आप <upstream>सीधे ईमेल भेजने या खींचने के बजाय ईमेल के माध्यम से पैच खिला रहे हों ।

           __*__*__*__*__> <upstream>
          /
fork-point
          \__+__+__-__+__+__-__+__> <head>

(यहाँ, चिह्नित ' -' के साथ दिखाई नहीं देगा git cherry, जिसका अर्थ है कि वे पहले से मौजूद हैं <upstream>।)


3
testsऔर master- masterवर्तमान शाखा है, इसलिए तारांकन।
blueyed

54
यह केवल यह दर्शाता है कि कौन सी शाखाएँ सटीक हैं । यदि आप यह जानना चाहते हैं कि किन शाखाओं में "समतुल्य" कमिटमेंट है (यानी किन शाखाओं को चेरी-पिक किया गया है), तो यह है git cherry: "क्योंकि git चेरी कमिट id (sha1) के बजाय बदलाव की तुलना करती है, आप यह जानने के लिए git चेरी का उपयोग कर सकते हैं। यदि आपके द्वारा स्थानीय रूप से की गई एक कमेटी को अलग-अलग कमिट आईडी के तहत <upstream> लागू किया गया है। उदाहरण के लिए, यह तब होगा जब आप सीधे ईमेल भेजने या खींचने के बजाय पैच <upstream> को फीड कर रहे हों। " kernel.org/pub/software/scm/git/docs/git-cherry.html
मैट्रिक्स 1

62
-aदूरस्थ शाखाओं की जांच के लिए एक पैरामीटर भी जोड़ें ।
रमन


5
इस git cherryभाग के लिए @UpAndAdam ने यहां प्रश्न पूछा: stackoverflow.com/questions/16304574/… , अफसोस, प्रश्न का उत्तर अभी तक नहीं दिया गया है।
adeelx

22

आप दौड़ सकते हैं:

git log <SHA1>..HEAD --ancestry-path --merges

आउटपुट में अंतिम प्रतिबद्ध की टिप्पणी से आपको मूल शाखा नाम मिल सकता है

उदाहरण:

       c---e---g--- feature
      /         \
-a---b---d---f---h---j--- master

git log e..master --ancestry-path --merges

commit h
Merge: g f
Author: Eugen Konkov <>
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'feature' into master

6
अच्छा! मुझे git log <SHA1>..master --ancestry-path --merges --oneline | tail -n1यह एक लाइन में मिलता था
जेम्स ईजे

1
यदि आप शुद्ध गिट कमांड का उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं:git log <SHA1>..master --ancestry-path --merges --oneline -1
बार्टोज़

नोट: जब आपकी कमिट शा मास्टर / foo ब्रांच (HEAD) पर सबसे हाल की कमिटमेंट है ... आप एक A..Bकमिट रेंज नहीं कर सकते , तो बस एक रेंज का उपयोग न करें :: git log HEAD --oneline -1> 82c12a9 (HEAD, origin/remote-branch-name, origin/master, origin/dev, origin/HEAD, master, dev) commit message
डेविन जी रोड

यदि यह git रेपो एक सबमॉड्यूल है और आप अलग-थलग पड़ने की समस्या को हल करने की कोशिश कर रहे हैं ... तो आपके पास एक पसंदीदा शाखा का एक कठिन प्रश्न है ... मेरे पिछले उदाहरण में आप आसानी से कह सकते हैं कि masterइस सूची में होने पर इसे हमेशा पसंद किया जाता है । वहां से यह कम स्पष्ट है। आप .itmodules फ़ाइल से गिट शाखा की कोशिश कर सकते हैं और पढ़ सकते हैं git config -f .gitmodules submodule.src/foo/submodule.branch:। यह लंबे समय तक चलने वाला कांटा / पीआर हो सकता है। आप रेपो रूट और चलाने के लिए सीडी कर सकते हैं git config submodule.src/foo/submodule.branch। आप सुपरप्रोजेक्ट वर्तमान गिट शाखा का भी उपयोग कर सकते हैं।
डेविन जी रोड

एक तरफ एक छोटी सी के रूप में: git config submodule.src/foo/submodule.branchकिसी भी प्रकार के गिट कॉन्फ़िगरेशन से प्रभावित हो सकता है, जिसमें एक रेपो-लोकल .gitconfig फ़ाइल शामिल है। (रनिंग की आवश्यकता होती है git config --local include.path ./path/to/your/.gitconfig)
डेविन जी रोड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.