सभी स्थानीय गिट शाखाओं को हटा दें


323

मैं एक विकास प्रक्रिया का पालन करता हूं जहां मैं हर नई सुविधा या कहानी कार्ड के लिए एक नई स्थानीय शाखा बनाता हूं। समाप्त होने पर मैंने शाखा को मास्टर में विलय कर दिया और फिर धक्का दिया।

आलस्य या विस्मृति के संयोजन के कारण समय के साथ क्या होता है, यह है कि मैं स्थानीय शाखाओं की एक बड़ी सूची के साथ समाप्त होता हूं, जिनमें से कुछ (जैसे स्पाइक्स) का विलय नहीं हुआ है।

मुझे पता है कि मेरी सभी स्थानीय शाखाओं को कैसे सूचीबद्ध किया जाए और मुझे पता है कि मुझे एक ही शाखा को कैसे निकालना है, लेकिन मैं सोच रहा था कि क्या कोई git कमांड है जो मुझे अपनी सभी स्थानीय शाखाओं को हटाने की अनुमति देता है?

नीचे git branch --mergedकमांड का आउटपुट है ।

user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

grep -v \*त्रुटियों के परिणामस्वरूप सूचीबद्ध शाखाओं को हटाने के सभी प्रयास निम्न हैं:

error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.

मैं उपयोग कर रहा हूं:
git 1.7.4.1
ubuntu 10.04
GNU बैश, संस्करण 4.1.5 (1) -release
GNU grep 2.5.4


7
मैं आपसे @Andrew के उत्तर को स्वीकार करने की विनती करता हूँ!
रॉबर्ट सीमर

संभावित रूप से डुप्लिकेट मैं उन सभी गिट शाखाओं
Giulio Caccin

@GiulioCaccin यह प्रश्न उन शाखाओं से भी संबंधित है जो शायद विलय नहीं हुई हैं और मैंने इस प्रश्न को स्पष्ट रूप से प्रतिबिंबित करने के लिए अद्यतन किया है।
लॉथ

जवाबों:


384

'Git ब्रांच -d' सबकुंड एक से अधिक ब्रांच को डिलीट कर सकता है। तो, @ sblom के उत्तर को सरल बनाना लेकिन एक महत्वपूर्ण xargs जोड़ना:

git branch -D `git branch --merged | grep -v \* | xargs`

या, इसके लिए और सरल:

git branch --merged | grep -v \* | xargs git branch -D 

महत्वपूर्ण रूप से, जैसा कि @AndrewC ने उल्लेख किया है, git branchस्क्रिप्टिंग के लिए उपयोग करना हतोत्साहित किया जाता है। इससे बचने के लिए कुछ का उपयोग करें:

git for-each-ref --format '%(refname:short)' refs/heads | grep -v master | xargs git branch -D

हटाए जाने पर चेतावनी!

$ mkdir br
$ cd br; git init
Initialized empty Git repository in /Users/ebg/test/br/.git/
$ touch README; git add README; git commit -m 'First commit'
[master (root-commit) 1d738b5] First commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git branch Story-123-a
$ git branch Story-123-b
$ git branch Story-123-c
$ git branch --merged
  Story-123-a
  Story-123-b
  Story-123-c
* master
$ git branch --merged | grep -v \* | xargs
Story-123-a Story-123-b Story-123-c
$ git branch --merged | grep -v \* | xargs git branch -D
Deleted branch Story-123-a (was 1d738b5).
Deleted branch Story-123-b (was 1d738b5).
Deleted branch Story-123-c (was 1d738b5).

यह कमांड अभी भी उसी त्रुटियों की रिपोर्ट करता है जैसा कि नीचे दिए गए उत्तर के लिए टिप्पणियों में वर्णित है। error:branch 'STORY-123-Short-Description' not found.सूचीबद्ध शाखाओं में से प्रत्येक के लिए।
Louth

1
मेरे लिये कार्य करता है; विवरण के साथ ऊपर देखें।
गोजोनर

1
तो, क्या git 1.7.10 का उपयोग करने से आपकी समस्या का समाधान हो गया है या आप सीधे .it रिपॉजिटरी में काम करना पसंद करते हैं?
गोजोनर

1
यदि आपको कोई error:branch 'STORY-123-Short-Description' not found.त्रुटि मिलती है , तो यह संभवतः गिट रंग सेटिंग्स के कारण है। इसने मेरे लिए काम किया ( --no-colorविकल्प पर ध्यान दें ):git branch --no-color --merged | grep -v \* | xargs git branch -D
marcok

3
एसओ पर एकमात्र उत्तर मैंने पाया है कि काम करता है। धन्यवाद!
केविन सटल सूक्ष्म

140

मुझे गितुब पर इस मुद्दे पर एक टिप्पणी में एक अच्छा तरीका मिला :

git branch --merged master --no-color | grep -v master | grep -v stable | xargs git branch -d

संपादित करें: जोड़ा गया बिना रंग का विकल्प और स्थिर शाखा को छोड़कर (आपके मामले में अन्य शाखाओं को आवश्यकतानुसार जोड़ें)


2
अंत में, मुझे समाधान की आवश्यकता है
कोड व्हिस्पर

1
मैंने यह कोशिश की है, लेकिन error: branch 'my-branch-name' not found.हर शाखा के लिए मिल रहा है । Git संस्करण 1.8.3.4 (Apple Git-47) का उपयोग करना। कोई विचार क्यों?
wheresrhys

कोशिश 'git शाखा - कुशल मास्टर | grep -v मास्टर | xargs की गूंज 'डीबग करने के लिए कि वह वास्तव में क्या हटाने की कोशिश कर रहा है? कोई बेहतर विचार है ...
mBardos

2
इसलिए। git for-each-ref --format '%(refname:short)' refs/heads/ | grep -v master | xargs git branch -d
Павел Тявин

1
इसके साथ xargs का उपयोग सीखा। धन्यवाद
Volem

105

आउटपुट को पार्स करने की git branchअनुशंसा नहीं की जाती है, और स्टैक ओवरफ्लो पर भविष्य के पाठकों के लिए एक अच्छा जवाब नहीं है।

  1. git branchएक चीनी मिट्टी के बरतन कमान के रूप में जाना जाता है। चीनी मिट्टी के बरतन आदेशों को मशीन पार्स होने के लिए डिज़ाइन नहीं किया गया है और आउटपुट गीट के विभिन्न संस्करणों के बीच बदल सकता है।
  2. उपयोगकर्ता कॉन्फ़िगरेशन विकल्प हैं जो आउटपुट को git branchइस तरह से बदलते हैं जिससे पार्स करना मुश्किल हो जाता है (उदाहरण के लिए, रंगकरण)। यदि कोई उपयोगकर्ता सेट किया गया है, color.branchतो आपको आउटपुट में नियंत्रण कोड मिलेगा, इससे error: branch 'foo' not found.यदि आप इसे किसी अन्य कमांड में पाइप करने का प्रयास करेंगे । आप इसे --no-colorध्वज के साथ बायपास कर सकते हैं git branch, लेकिन कौन जानता है कि अन्य उपयोगकर्ता कॉन्फ़िगरेशन क्या चीजें तोड़ सकते हैं।
  3. git branch अन्य चीजें जो पार्स करने के लिए कष्टप्रद हो सकती हैं, जैसे कि वर्तमान में जाँच की गई शाखा के आगे एक तारांकन चिह्न रखें

Git की देखभाल करने वाले इस में क्या कहना है चारों ओर पटकथा के बारे में git branchउत्पादन

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

.gitनिर्देशिका में फ़ाइलों को मैन्युअल रूप से संपादित करने का सुझाव देने वाले उत्तर (जैसे .गित / रेफ्स / हेड्स) समान रूप से समस्याग्रस्त होते हैं (रिफ्स इसके बजाय .गित / पैक्ड-रिफ हो सकते हैं, या गिट भविष्य में उनके आंतरिक लेआउट को बदल सकते हैं)।

Git for-each-refशाखाओं की सूची पुनः प्राप्त करने के लिए कमांड प्रदान करता है ।

Git 2.7.X --mergedविकल्प को पेश करेगा ताकि आप नीचे विलय जैसी सभी शाखाओं को खोजने और हटाने के लिए कुछ कर सकेंHEAD

for mergedBranch in $(git for-each-ref --format '%(refname:short)' --merged HEAD refs/heads/)
do
    git branch -d ${mergedBranch}
done

2.6.X और पुराने पर जाएं, आपको सभी स्थानीय शाखाओं को सूचीबद्ध करना होगा और फिर व्यक्तिगत रूप से यह देखने के लिए परीक्षण करना होगा कि क्या उन्हें विलय कर दिया गया है (जो कि काफी धीमा और थोड़ा अधिक जटिल होगा)।

for branch in $(git for-each-ref --format '%(refname:short)' refs/heads/)
do
    git merge-base --is-ancestor ${branch} HEAD && git branch -d ${branch}
done

git branch --no-color 2>/dev/null?
नोबार

5
यह सुनिश्चित करने के लिए एक सुधार है। तुम हमेशा * बाहर फ़िल्टर करने की आवश्यकता की समस्या होगी, और यह चीजों को मनोरंजक अगर किसी को अलग सिर से चलाता है। मुख्य समस्या हालांकि git branchएक चीनी मिट्टी के बरतन कमान है, और इस बात की कोई गारंटी नहीं है कि उत्पादन भविष्य के कुछ संस्करणों में नहीं बदलेगा।
एंड्रयू सी

शुक्रिया @AndrewC - यह दोनों सवालों का जवाब है, जो रहस्यमय "ब्रांच को नहीं मिला" त्रुटियों से जूझ रहा है और अधिक उपयुक्त कमांड का उपयोग करके एक कार्यशील समाधान प्रदान करता है! 👍
जेसन

2
'चीनी मिट्टी के बरतन' और 'गैर-चीनी मिट्टी के बरतन' जीआईटी आदेशों की पहचान कैसे की जाती है?
गोजोनर

1
संभवतः डिफ़ॉल्ट रूप से 'देव' और 'मास्टर' को बाहर करने के लिए एक उपयोगी वृद्धि होगी?
पांडावुड

65

सभी शाखाओं को हटाने का सरल तरीका लेकिन दूसरों को "विकसित करना" और "मास्टर" रखना निम्न है:

git branch | grep -v "develop" | grep -v "master" | xargs git branch -D

बहुत उपयोगी !


8
आपने एक पुराने धागे को फिर से जीवित कर दिया है और एक मौजूदा एक लगभग समान उत्तर पोस्ट किया है, जो छोटी गाड़ी है और इसमें होने वाले सुरक्षा परिवर्तन गायब हैं। यह एक अच्छा जवाब नहीं है।
एंड्रयू सी

6
यह उत्तर git शाखा से आउटपुट आउटपुट में, इसे संशोधित करने और git शाखा -D को पास करने में स्पष्ट है। मतलबी होने की जरूरत नहीं।
पाम

इस समाधान ने मेरे लिए काम किया। सभी स्थानीय शाखाओं को हटा दिया गया।
Prad

1
यह किसी भी शाखा को नष्ट नहीं करेगा जिसमें शब्द विकसित या मास्टर हो जैसे 'develop_feature' या 'master_feature'।
django

यह मैं
G के

62

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

for b in `git branch --merged | grep -v \*`; do git branch -D $b; done

मैं बदलने की सलाह देते हैं git branch -D $bएक करने के लिए echo $bपहले कुछ समय लगता है कि यह शाखाओं, जो आपका उद्देश्य को हटाता है बनाने के लिए।


1
इस आदेश के साथ error:branch 'a_branch_name' not found.मुझे यह देखने को मिल सकता है कि आप क्या करने की कोशिश कर रहे हैं और मैं कमांड के साथ खेल रहा हूं, लेकिन किसी कारण के लिए git को आपूर्ति किए गए शाखा नाम पसंद नहीं आते ...
Louth

हममम। समस्या निवारण में मदद करने के लिए, यह कुछ उदाहरण के आउटपुट को देखने के लिए उपयोगी होगाgit branch --merged
sblom

मेरी शाखा के नाम प्रारूप के हैंSTORY-123-Short-Description
Louth

और जब आप दौड़ते हैं git branch --merged, तो आपको प्रत्येक पंक्ति में से एक के साथ एक सूची मिलती है?
sblom

1
क्या यह सचमुच कहता है error:branch 'a_branch_name' not found.? या क्या यह आपके git branchआउटपुट से ऊपर के शाखा नामों में से एक के बारे में शिकायत करता है ?
sblom

52

नीचे दी गई कमांड मास्टर शाखा को छोड़कर सभी स्थानीय शाखाओं को हटा देगी।

git branch | grep -v "master" | xargs git branch -D

उक्त आज्ञा

  1. सभी शाखाओं को सूचीबद्ध करें
  2. सूची से मास्टर शाखा को अनदेखा करें और बाकी शाखाओं को ले जाएं
  3. शाखा हटाएं

4
मैं git branch | grep -v "master" | xargs git branch -dपहली बार उपयोग करूंगा ताकि मैं सुरक्षित शाखाओं को हटा न दूं, बस सुरक्षित रहूं। लेकिन अच्छा जवाब!
जोनास लोमहोल्ड

3
यहाँ एक ,@(git branch | Select-String -Pattern "[^(*?)\s? master]") | ForEach-Object{$_.Line.Trim()} | %{git branch -D $_}
पावरशेल

1
@baklazan यह केवल विंडोज 10 कमांड लाइन में काम करेगा यदि आपके पास कुछ उपकरण स्थापित हैं। आपके पास शायद MINGW या ऐसी कोई और चीज है और आप इसे नहीं जानते हैं।
KthProg

42

बस एक नोट, मैं 1.7.10 git में अपग्रेड करेगा। आपको यहां ऐसे उत्तर मिल सकते हैं जो आपके संस्करण पर काम नहीं करेंगे। मेरा अनुमान है कि आपको शाखा के नाम के साथ उपसर्ग करना होगा refs/heads/

चेतावनी, केवल तभी काम करें जब आपने अपने काम करने वाले फ़ोल्डर और .git निर्देशिका की एक प्रति बनाई हो।

मैं कभी-कभी बस आगे बढ़ता हूं और उन शाखाओं को हटा देता हूं जिन्हें मैं सीधे नहीं चाहता .git/refs/heads। ये सभी शाखाएं ऐसी पाठ फाइलें हैं, जिनमें वे जिस बिंदु को इंगित करती हैं, उसके 40 वर्ण श -1 शामिल हैं। .git/configयदि आपके पास उनमें से किसी के लिए विशिष्ट ट्रैकिंग है, तो आपके पास अतिरिक्त जानकारी होगी । आप उन प्रविष्टियों को मैन्युअल रूप से भी हटा सकते हैं।


आखिर में एक सरल और व्यावहारिक विकल्प। मुझे यह पसंद है: डी
मेल्विन

2
अगर आपने पैक्ड रेफ्स, या यहां तक ​​कि अगर आपने कभी रिमोट सर्वर से क्लोन किया है (जो आपको पैक्ड फाइलें प्रदान करेगा) तो यह काम नहीं करेगा। यदि आप refs पैक कर रहे हैं, तो रेफरी को .it / refs / heads में संग्रहीत नहीं किया जाएगा, उन्हें "पैक-रेफ्स" नामक फ़ाइल में संग्रहीत किया जाएगा। Git-scm.com/docs/git-pack-refs देखें ।
अलेक्जेंडर बर्ड

1
ऐसा लगता है कि जिस शाखा को आपने देखा है उसे निकालने के लिए एक बुरा विचार है
Moberg

@Moberg बस पहले से एक चेकआउट करें, और आपका अलग किया गया एचएएडी सब ठीक हो जाएगा।
रोमेनैवलेरी

34

निम्नलिखित शेल कमांड आज़माएं:

git branch | grep -v "master" | xargs git branch -D

स्पष्टीकरण:

  • git branch | grep -v "master"कमांड के माध्यम से सभी शाखाएं प्राप्त करें
  • Every xargsकमांड के साथ हर शाखा का चयन करें
  • 💦 के साथ शाखा हटाएं xargs git branch -D

3
हालांकि यह एक सही जवाब हो सकता है। कोड की एक पंक्ति मूल प्रश्न को हल करने के तरीके की व्याख्या के बिना बहुत उपयोगी नहीं है। कृपया अपने उत्तर का विवरण दें।
रयाननर्ड

28

आप जिस पर हैं उसे छोड़कर सभी स्थानीय शाखाओं को लिनक्स में हटाने के लिए

// hard delete

git branch -D $(git branch)

2
यह एक .गित और सामान को हटाने की तुलना में सुरक्षित महसूस करता है।
नेल्सनटूरन

25

मुझे पाठ संपादक और शेल का उपयोग करना आसान लगा।

  1. git checkout <TAB>शेल में टाइप करें । सभी स्थानीय शाखाओं को दिखाएगा।
  2. उन्हें एक टेक्स्ट एडिटर पर कॉपी करें, जिन्हें आपको रखने की आवश्यकता है उन्हें हटा दें।
  3. रिक्त स्थान के साथ लाइन ब्रेक को बदलें। (SublimeText में यह सुपर आसान है।)
  4. खोल खोलो, टाइप करो git branch -D <PASTE THE BRANCHES NAMES HERE>

बस।


मुझे नहीं लगता कि आप उस शाखा को हटा सकते हैं जिस पर आप खड़े हैं।
डांग थांग

@ डोंग उस शाखा के पास एक * है ताकि आप इसे कॉपी की गई सूची से हटा दें!
मेलानी

12

मेरे पास इसी तरह की स्थिति थी और हाल ही में निम्नलिखित कमांड उपयोगी पाई गई।

git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep>/) printf "%s", $0 }'`

यदि आप कई शाखाएँ रखना चाहते हैं, तो

git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep1>|<Branch_You_Want_to_Keep2>/) printf "%s", $0 }'`

आशा है कि यह किसी की मदद करता है।


1
एक अच्छा है, लेकिन मुझे यह काम करने के लिए git branch -D `git branch | awk '{ if ($0 !~ /master/) printf "%s", $0 }'` बैकटिक्स की आवश्यकता थी - आमतौर पर मुझे लगता है कि आपने उन्हें मूल रूप से किया था, लेकिन वे एसओ प्रारूपण में खो गए।
तस्सारी

10

विंडोज कमांड लाइन से, वर्तमान चेक आउट शाखा को छोड़कर सभी को हटा दें:

for /f "tokens=*" %f in ('git branch ^| find /v "*"') do git branch -D %f

7

यदि आपको स्वयं गिट के माध्यम से जाने की आवश्यकता नहीं है, तो आप मैन्युअल रूप से या प्रोग्रामेटिक रूप से .it / refs / heads के अंतर्गत सिर हटा सकते हैं । निम्नलिखित को बैश के तहत न्यूनतम ट्वीकिंग के साथ काम करना चाहिए:

shopt -s extglob
rm -rf .git/refs/heads/!(master)

यह आपकी स्थानीय शाखा को छोड़कर हर स्थानीय शाखा को हटा देगा। चूँकि आपकी अपस्ट्रीम शाखाएँ .it / refs / remotes के तहत संग्रहीत की जाती हैं , वे अछूती रहेंगी।

यदि आप बैश का उपयोग नहीं कर रहे हैं, या एक ही बार में बहुत सारे Git रिपॉजिटरी को फिर से बनाना चाहते हैं, तो आप GNU खोज के साथ कुछ ऐसा कर सकते हैं:

find . \
    -path remotes -path logs -prune -o \
    -wholename \*.git/refs/heads/\* \! -name master -print0 |
xargs -0 rm -rf

खोज समाधान संभवतः अधिक पोर्टेबल है, लेकिन पथ और फ़ाइल नाम मुश्किल और संभावित रूप से अधिक त्रुटि-प्रवण हैं।


ठंडा। विजुअल डिलीट :)
सैंडलोन

5

कोई भी उत्तर मेरी आवश्यकताओं को पूरी तरह से संतुष्ट नहीं करता है, इसलिए यहां हम जाते हैं:

git branch --merged | grep -E "(feature|bugfix|hotfix)/" | xargs git branch -D && git remote prune origin

यह उन सभी स्थानीय शाखाओं को हटा देगा जो विलय और से शुरू हो रही हैं feature/, bugfix/या hotfix/। बाद में अपस्ट्रीम रिमोटorigin छंट जाता है (आपको पासवर्ड दर्ज करना पड़ सकता है)।

Git 1.9.5 पर काम करता है।


5

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

git for-each-ref --format '%(refname:short)' refs/heads | grep -Ev `git ls-remote --quiet --heads origin | awk '{print substr($2, 12)}'| paste -sd "|" -` | xargs git branch -D

3

हालांकि यह एक कमांड लाइन समाधान नहीं है, मुझे आश्चर्य है कि गिट जीयूआई अभी तक सुझाया नहीं गया है।

मैं कमांड लाइन का 99% समय का उपयोग करता हूं, लेकिन इस मामले में इसकी या तो धीमी गति से (इसलिए मूल प्रश्न), या आप नहीं जानते कि कुछ लंबी, लेकिन चतुर शेल हेरफेर का सहारा लेते समय आप क्या हटाने वाले हैं।

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

UI से शाखा में जाएं -> हटाएं और Ctrl + उन शाखाओं पर क्लिक करें जिन्हें आप हटाना चाहते हैं ताकि वे हाइलाइट हो जाएं। आप होना चाहते हैं सुनिश्चित करें कि वे एक शाखा (जैसे में विलय कर रहे हैं devके तहत,) सिर्फ अगर मर्ज किए गए में हटाएं सेट स्थानीय शाखा के लिए dev। अन्यथा, इस चेक को अनदेखा करने के लिए इसे हमेशा सेट करें।

GitUI: स्थानीय शाखाओं को हटाएं


1

शक्तियों के लिए, यह काम करेगा:

git branch --format '%(refname:lstrip=2)' --merged `
    | Where-Object { $_ -ne 'master' } `
    | ForEach-Object { git branch -d $_ }

0

निम्न स्क्रिप्ट शाखाओं को हटा देती है। इसका उपयोग करें और इसे अपने जोखिम पर संशोधित करें, आदि।

इस प्रश्न के अन्य उत्तरों के आधार पर, मैंने अपने लिए एक त्वरित बैश स्क्रिप्ट लिखना समाप्त कर दिया। मैंने इसे "gitbd" (git Branch -D) कहा है, लेकिन यदि आप इसका उपयोग करते हैं, तो आप इसका नाम बदलकर जो चाहें कर सकते हैं।

gitbd() {
if [ $# -le 1 ]
  then
    local branches_to_delete=`git for-each-ref --format '%(refname:short)' refs/heads/ | grep "$1"`
    printf "Matching branches:\n\n$branches_to_delete\n\nDelete? [Y/n] "
    read -n 1 -r # Immediately continue after getting 1 keypress
    echo # Move to a new line
    if [[ ! $REPLY == 'N' && ! $REPLY == 'n' ]]
      then
        echo $branches_to_delete | xargs git branch -D
    fi
else
  echo "This command takes one arg (match pattern) or no args (match all)"
fi
}

यह किसी भी शाखा को हटाने की पेशकश करेगा जो एक पैटर्न तर्क से मेल खाता है, यदि पास किया गया है, या सभी स्थानीय शाखाओं में जब कोई तर्क नहीं है। यह आपको एक पुष्टि कदम भी देगा, क्योंकि, आप जानते हैं, हम चीजों को हटा रहे हैं, इसलिए यह अच्छा है।

यह एक प्रकार का गूंगा है - अगर कोई शाखाएं नहीं हैं जो पैटर्न से मेल खाती हैं, तो इसका एहसास नहीं होता है।

एक उदाहरण आउटपुट रन:

$ gitbd test
Matching branches:

dummy+test1
dummy+test2
dummy+test3

Delete? [Y/n] 

0

सिवाय सभी स्थानीय शाखाओं को हटाने के लिए मैंने एक शेल स्क्रिप्ट लिखी develop

branches=$(git branch | tr -d " *")
output=""
for branch in $branches 
do
  if [[ $branch != "develop" ]]; then
    output="$output $branch"
  fi
done
git branch -d $output

0

उपरोक्त उत्तर ठीक काम करता है। यहां एक और दृष्टिकोण है जब हमारे पास स्थानीय रेपो में बहुत सारी शाखाएं हैं और हमें कुछ शाखाओं को हटाना होगा जो स्थानीय मशीन में पड़ी हैं।

पहले git branchसभी स्थानीय शाखाओं को सूचीबद्ध करेगा।

एक यूनिक्स कमांड चलाकर फ़ाइल में एकल पंक्ति में शाखा नामों के कॉलम को स्थानांतरित करने के
git branch > sample.txt
लिए यह इसे नमूने में सहेजेगा । और
awk 'BEGIN { ORS = " " } { print }' sample.txt
शेल में कमांड चलाएं । यह कॉलम को पंक्ति में बदल देगा और एकल पंक्ति में शाखा नामों की सूची की प्रतिलिपि बनाएगा।

और फिर चला
git branch -D branch_name(s)
यह स्थानीय में मौजूद सभी सूचीबद्ध शाखाओं को हटा देगा


0

सबसे व्यावहारिक तरीका: सुनिश्चित करें कि आपके पास बिना काम का काम नहीं है master, अगर जरूरत पड़े तो कमिट / पुश करें, रिपॉजिटरी की एक नई प्रति क्लोन करें और पुराने को हटा दें।



0

मेरे पास मेरे बॉक्स पर grep या अन्य यूनिक्स नहीं है लेकिन यह VSCode के टर्मिनल से काम करता है:

git branch -d $(git branch).trim()

मैं लोअरकेस का उपयोग करता हूं ताकि यह अनमैरिड ब्रांच को डिलीट न करे।

मैं मास्टर पर था जब मैंने इसे किया था, तो * masterयह मौजूद नहीं है इसलिए इसने मास्टर को हटाने का प्रयास नहीं किया।


पुष्टि की गई: यदि नहीं master, तो यह आदेश हटा देगा master
ब्रेट रोवेबेरी

-1

सुनिश्चित करें कि आप पहले ऐसा करते हैं

git fetch

एक बार आपके पास सभी दूरस्थ शाखाओं की जानकारी होने के बाद, मास्टर को छोड़कर हर एक शाखा को निकालने के लिए निम्न कमांड का उपयोग करें

 git branch -a | grep -v "master" | grep remotes | sed 's/remotes\/origin\///g' | xargs git push origin --delete
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.