मैं Git 1.7+ में सभी दूरस्थ शाखाओं को कैसे सूचीबद्ध करूं?


634

मैंने कोशिश की है git branch -r, लेकिन यह केवल उन दूरस्थ शाखाओं को सूचीबद्ध करता है जिन्हें मैंने स्थानीय रूप से ट्रैक किया है। मुझे उन लोगों की सूची कैसे मिलेगी जो मैंने नहीं की है? (यह मेरे लिए कोई मायने नहीं रखता है कि क्या कमांड सभी दूरस्थ शाखाओं को सूचीबद्ध करती है या केवल वे ही जो अनट्रैक हैं।)


11
तुम्हारा मतलब है तुम डिफ़ॉल्ट refspec संशोधित कर लिया है, ताकि git fetchऔर git remote updateसभी दूरस्थ की शाखाओं लाने नहीं है? क्योंकि अन्यथा आप अभी प्राप्त कर सकते हैं git branch -r...
Cascabel

2
मेरे पास होना चाहिए। git branch -rकेवल मुझे दूरस्थ शाखाएँ दिखा रहा था जिन्हें मैंने स्थानीय रूप से ट्रैक किया था। यह अब बेहतर काम कर रहा है।
जेम्स ए। रोसेन

जवाबों:


804

यहां आगंतुकों के विशाल बहुमत [1] के लिए, सवाल का सही और सरल उत्तर "मैं Git 1.7+ में सभी दूरस्थ शाखाओं को कैसे सूचीबद्ध करूं?" है:

git branch -r

एक छोटे से अल्पसंख्यक के लिए [1] git branch -r काम नहीं करता है। अगर git branch -rकाम नहीं करता है:

git ls-remote --heads <remote-name>

अगर git branch -rकाम नहीं करता है, तो शायद के रूप में Cascabel कहते हैं "यदि आप डिफ़ॉल्ट refspec संशोधित कर लिया है, ताकि git fetchऔर git remote updateसभी लाने नहीं है remoteकी शाखाओं"


[१] इस फुटनोट २०१ the-फरवरी के लेखन के रूप में, मैंने टिप्पणियों पर ध्यान दिया और देखा कि git branch -rविशाल बहुमत के लिए काम करता है ( १४० में से लगभग ९ ०% या १२५ )।

यदि git branch -rकाम नहीं करता है, तो इस उत्तर के अनुसार चेक git config --get remote.origin.fetchमें एक वाइल्डकार्ड ( *) होता है


15
आप ऐसा भी कर सकते हैं कि git ls-remote [url]आपको इसे पहले क्लोन न करना
पड़े

142
यह उत्तर सही है लेकिन भ्रामक है, खोज इंजन से यहाँ आने वाले पहले उपयोगकर्ता को देखना चाहिए: git branch -rक्योंकि यह सही और सरल उत्तर है, पूछने वाले के पास एक विशेष मामला था जहाँ उसने अपने व्यवहार को संशोधित किया git branch -rकि यहाँ आने वाले अधिकांश उपयोगकर्ता नहीं होंगे। है
Stephan

24
@ स्टेफ़न: क्या आप इस बारे में निश्चित हैं? git branch -rमेरे लिए भी काम नहीं किया। यह सिर्फ स्थानीय रूप से ट्रैक की गई शाखाओं को सूचीबद्ध कर रहा है। लेकिन git ls-remote --headsदूरस्थ रिपॉजिटरी पर उपलब्ध सभी शाखाओं को सूचीबद्ध ...
रेक्सफ़ोर्ड

2
यदि कोई इसके माध्यम से सूचीबद्ध शाखाओं git ls-remote(और सूचीबद्ध नहीं git branch -r) से प्राप्त करना चाहता है , तो किसी को stackoverflow.com/a/26649770/873282git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" पर वर्णित के रूप में लाने से पहले निष्पादित करना होगा ।
कोप्पोर

11
git fetch --allसभी मौजूदा दूरस्थ शाखाओं को प्राप्त करने से पहले करना न भूलें ।
ए। अटिया

173

remote show रिमोट पर सभी शाखाओं को दिखाता है, जिनमें स्थानीय स्तर पर ट्रैक नहीं किया गया है और यहां तक ​​कि उन लोगों को भी शामिल किया गया है जिन्हें अभी तक नहीं लाया गया है।

git remote show <remote-name>

यह आपके स्थानीय भंडार के सापेक्ष शाखाओं की स्थिति दिखाने की भी कोशिश करता है:

> git remote show origin
* remote origin
  Fetch URL: C:/git/.\remote_repo.git
  Push  URL: C:/git/.\remote_repo.git
  HEAD branch: master
  Remote branches:
    branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
    branch_that_is_not_tracked      tracked
    branch_that_is_tracked          tracked
    master                          tracked
  Local branches configured for 'git pull':
    branch_that_is_tracked merges with remote branch_that_is_tracked
    master                 merges with remote master
  Local refs configured for 'git push':
    branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
    master                 pushes to master                 (up to date)

बिल्कुल सही। नहीं लाया गया, स्थानीय रूप से ट्रैक नहीं किया गया।
फुफिर

3
branch_that_is_not_tracked tracked?
पायोत्र डोब्रोगोस्ट

3
@PiotrDobrogost हाँ! branch_that_is_not_trackedएक शाखा है जिसे किसी स्थानीय गिट शाखा द्वारा ट्रैक नहीं किया जाता है। हालाँकि, इसे स्थानीय रिपॉजिटरी में लाया गया है (इसलिए एक दूरस्थ शाखा है)। किसी अजीब कारण सेgit remote show इस राज्य को कॉल किया जाता है tracked, भले ही रिमोट को ट्रैक करने वाली कोई स्थानीय शाखा न हो। इस मामले में, इसका विपरीत trackedहै new, जिसका अर्थ है "भ्रूण नहीं"।
क्लॉस मेलबर्न

यह प्रोग्राम काम नहीं करता है, पार्स करने के लिए बहुत कठिन है
अलेक्जेंडर मिल्स

इसने एक विशेष मामले को पकड़ा, जहां मैंने स्थानीय रूप से एक दूरस्थ शाखा खींची थी, जिसे तब रिमोट पर हटा दिया गया था। फिर git branch -rपता चलता है कि अभी भी एक दूरस्थ शाखा है, लेकिन यह git remote show originदर्शाता है refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove)। बहुत अधिक उपयोगी!
icc97

53
git branch -a | grep remotes/*

10
यह मूल रूप से इसके बराबर है git branch -r, जिसे ओपी ने कहा था कि यह पर्याप्त नहीं है।
कैसबेल

9
वास्तव में दोनों git branch -aऔर git branch -rमेरे लिए सभी दूरस्थ शाखाओं को सूचीबद्ध करते हैं, मुझे यकीन नहीं है कि अगर ओपी ने कहा कि क्या सच है। मैं सिर्फ एक परीक्षण भंडार स्थापित करता हूं और इसे सत्यापित करता हूं (केवल मास्टर ट्रैकिंग मूल / मास्टर था लेकिन फिर भी दोनों झंडे के साथ सभी दूरस्थ शाखाएं देखीं)।
इदन के

2
ऐसा लगता है कि यह सभी दूरस्थ शाखाओं को सूचीबद्ध नहीं करता है यदि मैं मौजूदा खींची गई रेपो से क्लोन करता हूं और फिर मैन्युअल रूप से गिट सर्वर पर मूल बिंदु। स्वीकृत उत्तर इस मामले को संभालता है।
नील्सबॉट

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

अजीब बात है: वर्षों से मैंने इसका उपयोग git fetchकिया है git branch -a, जो हाल ही में मेरे लिए असफल होना शुरू हुआ। शायद व्यवहार बदल गया था?
सेबेस्टियन मच

39

का उपयोग करते हुए git branch -rसभी दूरस्थ शाखाओं की सूची और git branch -aस्थानीय और दूरस्थ सभी शाखाओं को सूचीबद्ध करता है। हालांकि ये सूचियाँ पुरानी हो गई हैं। इन सूचियों को अद्यतित रखने के लिए, चलाएं

git remote update --prune

जो रिमोट से सभी नए लोगों के साथ आपकी स्थानीय शाखा सूची को अपडेट करेगा और जो अब नहीं हैं उन्हें हटा देगा। --Prune के बिना इस अपडेट कमांड को चलाने से नई शाखाएँ पुनः प्राप्त हो जाएंगी, लेकिन रिमोट पर मौजूद लोगों को नहीं हटाएंगी।

आप रिमोट को निर्दिष्ट करके इस अपडेट को गति दे सकते हैं, अन्यथा यह आपके द्वारा जोड़े गए सभी रीमोट से अपडेट खींच लेगा, जैसे कि

git remote update --prune origin

इससे मेरी समस्या ठीक हो गई - 'गिट ब्रांच -r' अब मेरे लिए काम करती है।
फ्रांसिस नॉर्टन

27

परंतु

git branch -ar

करना चाहिए।


41
दोनों तर्कों में पास होना बेमानी है। केवल दूरस्थ शाखाएँ -rलौटाता है । स्थानीय और दूरस्थ दोनों शाखाओं को लौटाता है । इस प्रकार, और दोनों एक ही आउटपुट प्राप्त करते हैं। -agit branch -agit branch -ar
वाल्टर रोमन

19

तुम भी git fetchएक के बाद कर सकते हैं git branch -r। लाने के बिना आप सबसे वर्तमान शाखाओं को नहीं देखेंगे।


git fetch --allसभी वर्तमान शाखाओं के लिए
ए। एटिया

19

गिट ब्रांचिंग - दूरस्थ शाखाएँ

git ls-remote

दस्तावेज इकट्ठा करें


git ls-Remote --heads अधिक विशिष्ट परिणाम प्राप्त करने के लिए
वोल्फगैंग

1
यह केवल आदेश भी अपनी शाखा मैंने गलती से धक्का दे दिया सूचीबद्ध करती है जो बिना है heads/में refs/heads/features/my-branchधन्यवाद!
एमएसए


9

टी एल; टी.आर.;

यह आपकी समस्या का हल है:

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

या:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches

5

चलाने के लिए सबसे अच्छी कमांड है git remote show [remote]। यह सभी शाखाओं को दिखाएगा, दूरस्थ और स्थानीय, ट्रैक और अनट्रैकेड।

यहाँ एक ओपन सोर्स प्रोजेक्ट का उदाहरण दिया गया है:

> git remote show origin
* remote origin
  Fetch URL: https://github.com/OneBusAway/onebusaway-android
  Push  URL: https://github.com/OneBusAway/onebusaway-android
  HEAD branch: master
  Remote branches:
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked
    refs/remotes/origin/branding stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    develop merges with remote develop
    master  merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (local out of date)
    master  pushes to master  (up to date)

यदि हम केवल दूरस्थ शाखाएँ प्राप्त करना चाहते हैं, तो हम उपयोग कर सकते हैं grep। हम जिस कमांड का उपयोग करना चाहते हैं वह होगा:

grep "\w*\s*(new|tracked)" -E

इस आदेश के साथ:

> git remote show origin | grep "\w*\s*(new|tracked)" -E
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked

आप इसके लिए एक उपनाम भी बना सकते हैं:

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

तब तुम बस दौड़ सकते हो git branches




4

बस एक git fetchकमांड चलाते हैं । यह आपके स्थानीय भंडार के लिए सभी दूरस्थ शाखाओं को खींच लेगा, और फिर git branch -aसभी शाखाओं को सूचीबद्ध करने के लिए करेगा।


1

यदि कोई दूरस्थ शाखा है जिसे आप जानते हैं कि उसे सूचीबद्ध किया जाना चाहिए, लेकिन यह सूचीबद्ध नहीं हो रही है, तो आप यह सत्यापित करना चाह सकते हैं कि आपका मूल इसके साथ सेट है:

git remote show origin

यदि यह सब अच्छा है, तो शायद आपको एक अपडेट चलाना चाहिए:

git remote update

यह मानते हुए कि सफलतापूर्वक चलता है, आपको वह करने में सक्षम होना चाहिए जो अन्य उत्तर कहते हैं:

git branch -r

1

इस आदेश का उपयोग करते हुए,

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

यह सभी दूरस्थ शाखाओं को सूचीबद्ध करता है जिसमें प्रतिबद्ध संदेश और प्रतिबद्ध आईडी शामिल हैं जो दूरस्थ शाखाओं द्वारा संदर्भित हैं।


1

मै इस्तेमाल करूंगा:

git branch -av

यह कमांड न केवल आपको सभी शाखाओं की सूची दिखाता है, जिसमें दूरस्थ शाखाएं /remoteभी शामिल हैं, लेकिन यह *आपको अपडेट की गई और अंतिम प्रतिबद्ध टिप्पणियों पर प्रतिक्रिया भी प्रदान करता है ।


0

सुनिश्चित करें कि आप जिस दूरस्थ मूल को सूचीबद्ध कर रहे हैं, वह वास्तव में एक रिपॉजिटरी है जिसे आप चाहते हैं और एक पुराना क्लोन नहीं है।


0

मैंने एक गड़बड़ शेल पाइपलाइन बनाने का काम किया, जिसे मैं चाहता था। मैं मूल शाखा से शाखाओं को मिला देता हूं:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'

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