दिलचस्प पोस्ट
यूट्यूब वीडियो iframe के माध्यम से एंबेडेड है, z-index की उपेक्षा करना? मैं <सूची में कैसे जोड़ सकता हूं <? संख्या> डेटा ढांचे का विस्तार? नीला बूँद भंडारण फ़ाइलों से एक ज़िप फ़ाइल उत्पन्न जावास्क्रिप्ट में सटीक टाइमर कैसे बनाएं? मैं PowerShell स्क्रिप्ट कैसे लिख सकता हूं जो पाइप लाइन इनपुट स्वीकार करती है? आईफ़ोन – UIView पर पारदर्शी आयत को देखने के लिए नीचे देखने के लिए एन वैक्टर से ली गई तत्वों के सभी संयोजन युक्त एक मैट्रिक्स उत्पन्न करें फ्लोटिंग प्वाइंट नंबर की तुलना करने के लिए शून्य "MoveFile" फ़ंक्शन C # में (रिबूट के बाद फ़ाइल हटाएं) स्विफ्ट में खाली स्ट्रिंग की जांच करें? स्पार्क का उपयोग करने वाले मध्य और मात्रा का पता कैसे करें java.net.MalformedURLException: नहीं प्रोटोकॉल Google OAuth ताज़ा करें टोकन प्राप्त नहीं कर रहा है पाठ के इनपुट के साथ jQuery का Datepicker जो उपयोगकर्ता इनपुट की अनुमति नहीं देता है सी में कॉन्ट पॉइंटर को खाली करने में असमर्थ

मर्ज किए गए सभी गिट शाखाओं को मैं कैसे हटा सकता हूं?

मेरे पास कई गीट शाखाएं हैं मैं पहले से ही मर्ज किए गए शाखाओं को कैसे हटा सकता हूं? क्या उन्हें हटाने के लिए एक-एक करके उन्हें हटाने का एक आसान तरीका है?

Solutions Collecting From Web of "मर्ज किए गए सभी गिट शाखाओं को मैं कैसे हटा सकता हूं?"

अद्यतन करें:

यदि आप अपने वर्कफ़्लो में संभावित पूर्वज के रूप में हैं, तो आप मास्टर और देव जैसे अन्य शाखाओं को बाहर कर सकते हैं। आम तौर पर मैं "स्प्रिंट-शुरू" टैग और मास्टर, देव और क्यूए से शाखा बंद करता हूं पूर्वजों नहीं है

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

 git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d 

आप देख सकते हैं कि स्वामी और देव को पूर्वजों के मामले में छोड़ दिया जाता है।


आप विलय की गई एक स्थानीय शाखा को हटा सकते हैं:

 git branch -d branchname 

यदि यह विलय नहीं है, तो इसका उपयोग करें:

 git branch -D branchname 

इसे गिट के पुराने संस्करणों में रिमोट से हटाने के लिए:

 git push origin :branchname 

Git के अधिक हाल के संस्करणों में उपयोग करें:

 git push --delete origin branchname 

रिमोट से शाखा हटाने के बाद, आप दूरस्थ ट्रैकिंग शाखाओं से छुटकारा पा सकते हैं:

 git remote prune origin 

या अलग-अलग रिमोट ट्रैकिंग शाखाओं को छंटनी, जैसा कि अन्य जवाब बताते हैं:

 git branch -dr branchname 

उम्मीद है की यह मदद करेगा।

पहले से ही मर्ज किए गए रिमोट पर सभी शाखाओं को हटाने के लिए:

 git branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin 

गिट के हाल के संस्करणों में

 git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin 

बस थोड़ा सा एडम के जवाब का विस्तार:

Git git config -e --global चलाकर इसे अपने Git कॉन्फ़िगरेशन में जोड़ें

 [alias] cleanup = "!git branch --merged | grep -v '\\*\\|master\\|develop' | xargs -n 1 git branch -d" 

और फिर आप सभी स्थानीय मर्ज किए गए शाखाओं को एक सरल git cleanup

यह गुरु के अलावा सभी मर्ज किए गए शाखाओं को हटाने के लिए भी काम करता है।

 git branch --merged | grep -v '^* master$' | grep -v '^ master$' | xargs git branch -d 

आप master को बाहर करना चाहते हैं और उन कमांड से शाखाएं develop करना चाहते हैं।

स्थानीय जीआईटी स्पष्ट:

 git branch --merged | grep -v '\*\|master\|develop' | xargs -n 1 git branch -d 

रिमोट जीआईटी स्पष्ट:

 git branch -r --merged | grep -v '\*\|master\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin 

दूरस्थ शाखाओं की स्थानीय रजिस्ट्री को सिंक करें:

 git fetch -p 

आप में से उन लोगों के लिए जो विंडोज पर हैं और पावरशेफ लिपियों को पसंद करते हैं, ये एक है जो स्थानीय मर्ज की गई शाखाओं को हटाता है:

 function Remove-MergedBranches { git branch --merged | ForEach-Object { $_.Trim() } | Where-Object {$_ -NotMatch "^\*"} | Where-Object {-not ( $_ -Like "*master" )} | ForEach-Object { git branch -d $_ } } 

गिट स्वीप इस का एक बहुत अच्छा काम करता है

आप – एमरगेट विकल्प में प्रतिबद्ध जोड़ सकते हैं। इस तरह आप सुनिश्चित कर सकते हैं कि केवल शाखाओं को निकालने के लिए जो मूल / मास्टर में विलय हो

निम्नलिखित कमांड आपके मूल से विलय की गई शाखाओं को निकाल देगा।

 git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 git push origin --delete 

आप परीक्षण कर सकते हैं कि कौन सी शाखाओं को गिट धक्का उत्पत्ति की जगह हटा दिया जाएगा – गूंज के साथ हटाएं

 git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 echo 

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

 #!/usr/bin/env ruby current_branch = `git symbolic-ref --short HEAD`.chomp if current_branch != "master" if $?.exitstatus == 0 puts "WARNING: You are on branch #{current_branch}, NOT master." else puts "WARNING: You are not on a branch" end puts end puts "Fetching merged branches..." remote_branches= `git branch -r --merged`. split("\n"). map(&:strip). reject {|b| b =~ /\/(#{current_branch}|master)/} local_branches= `git branch --merged`. gsub(/^\* /, ''). split("\n"). map(&:strip). reject {|b| b =~ /(#{current_branch}|master)/} if remote_branches.empty? && local_branches.empty? puts "No existing branches have been merged into #{current_branch}." else puts "This will remove the following branches:" puts remote_branches.join("\n") puts local_branches.join("\n") puts "Proceed?" if gets =~ /^y/i remote_branches.each do |b| remote, branch = b.split(/\//) `git push #{remote} :#{branch}` end # Remove local branches `git branch -d #{local_branches.join(' ')}` else puts "No branches removed." end end 

गिट संस्करण 2.5.0 का प्रयोग करना:

 git branch -d `git branch --merged` 

क्यूबून का जवाब शाखाओं को नष्ट करने से चूक जाता है जिसमें शाखा के मास्टर में शब्द मास्टर होता है उनके उत्तर पर निम्नलिखित सुधार होता है:

 git branch -r --merged | grep -v "origin/master$" | sed 's/\s*origin\///' | xargs -n 1 git push --delete origin 

बेशक, यह "मास्टर" शाखा को स्वयं नष्ट नहीं करता है 🙂

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

यदि आपको यह जानने की आवश्यकता है कि क्या शाखा को मास्टर में विलय कर दिया गया है, तो निम्न आदेश किसी आउटपुट का उत्पादन नहीं करेगा, यदि myTopicBranch को मिला दिया गया है (यानी आप इसे हटा सकते हैं)

 $ git rev-list master | grep $(git rev-parse myTopicBranch) 

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

git branch --merged | grep -Ev '^(. master|\*)' | xargs -n 1 git branch -d git branch --merged | grep -Ev '^(. master|\*)' | xargs -n 1 git branch -d मौजूदा चेक आउट शाखा और / या master को छोड़कर सभी स्थानीय शाखाओं को हटा देगा।

इन कमांडों को समझने वाले लोगों के लिए यहां एक उपयोगी लेख दिया गया है: Git Clean: स्टीवन हरमन द्वारा पहले से ही विलय करने वाली शाखाएं हटाएं

PowerShell कंसोल में मर्ज किए गए शाखाओं को कैसे हटाएं

 git branch --merged | %{git branch -d $_.Trim()} 

Windows के लिए GitHub देखें

आप git-del-br उपकरण का उपयोग कर सकते हैं।

 git-del-br -a 

आप इसे pip माध्यम से स्थापित कर सकते हैं

 pip install git-del-br 

पुनश्च: मैं उपकरण के लेखक हूं। कोई सुझाव / प्रतिक्रिया का स्वागत है

एडम के अपडेट किए गए उत्तर का उपनाम संस्करण:

 [alias] branch-cleanup = "!git branch --merged | egrep -v \"(^\\*|master|dev)\" | xargs git branch -d #" 

इसके अलावा, जटिल उपनामों से बचने के लिए आसान टिप्स का जवाब देखें।

निम्न आदेश आज़माएं:

git branch -d $(git branch --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

git rev-parse का उपयोग करके इसे बाहर करने के लिए मौजूदा शाखा नाम मिलेगा। अगर आपको त्रुटि मिलती है, तो इसका मतलब है कि निकालने के लिए कोई स्थानीय शाखाएं नहीं हैं।

दूरस्थ शाखाओं के साथ ऐसा करने के लिए (अपने रिमोट नाम से origin बदलें), कोशिश करें:

git push origin -vd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD) | cut -d/ -f2)

यदि आपके पास कई रिमोट हैं, तो grep origin | जोड़ें grep origin | cut करने से पहले केवल origin को फ़िल्टर कर दें।

यदि उपरोक्त आदेश विफल हो जाता है, तो पहले मर्ज किए गए दूरस्थ-ट्रैकिंग शाखाओं को हटाने का प्रयास करें:

git branch -rd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

फिर git fetch फिर से रिमोट ले git fetch और पिछले git push -vd कमांड का पुनः प्रयोग करें।

यदि आप इसे अक्सर उपयोग कर रहे हैं, तो अपने ~/.gitconfig फ़ाइल में उपनाम के रूप में जोड़ने पर विचार करें।

अगर आपने कुछ शाखाओं को गलती से हटा दिया है, तो खोए हुए git reflog को खोजने के लिए git reflog का उपयोग करें

इन उत्तरों में से कुछ के आधार पर मैंने यह भी करने के लिए अपनी खुद की बास स्क्रिप्ट बनाई है !

यह git branch --merged का उपयोग करता है – git branch --merged किए गए और शाखाओं को नष्ट करने के लिए git branch -d का उपयोग करता है जो विलय कर दिया गया है और हटाने से पहले प्रत्येक शाखाओं के लिए आपको प्रेरित करता है।

 merged_branches(){ local current_branch=$(git rev-parse --abbrev-ref HEAD) for branch in $(git branch --merged | cut -c3-) do echo "Branch $branch is already merged into $current_branch." echo "Would you like to delete it? [Y]es/[N]o " read REPLY if [[ $REPLY =~ ^[Yy] ]]; then git branch -d $branch fi done } 

मैं एक git-flow esque नामकरण योजना का उपयोग करता हूं, इसलिए यह मेरे लिए बहुत सुरक्षित काम करता है:

 git branch --merged | grep -e "^\s\+\(fix\|feature\)/" | xargs git branch -d 

यह मूल रूप से मर्ज किए गए कमिट के लिए दिखता है जो स्ट्रिंग fix/ या feature/ साथ शुरू होता है

यदि आप उन सभी स्थानीय शाखाओं को हटाना चाहते हैं जो पहले से ही उस शाखा में मर्ज किए गए हैं जो आप वर्तमान में हैं, तो मैंने पहले उत्तर के आधार पर ऐसा करने के लिए एक सुरक्षित आदेश दिया है:

 git branch --merged | grep -v \* | grep -v '^\s*master$' | xargs -t -n 1 git branch -d 

यह कमांड आपकी वर्तमान शाखा या अपनी मास्टर शाखा को प्रभावित नहीं करेगा। यह आपको यह भी बताएगा कि ऐसा करने से पहले यह क्या कर रहा है, xargs के -t ध्वज का उपयोग कर।

एक स्क्रिप्ट लिखें जिसमें GIT उन सभी शाखाओं को देखता है जिन्हें मास्टर में विलय कर दिया गया है।

फिर git checkout master

अंत में, मर्ज किए गए शाखाओं को हटा दें।

 for k in $(git branch -ra --merged | egrep -v "(^\*|master)"); do branchnew=$(echo $k | sed -e "s/origin\///" | sed -e "s/remotes\///") echo branch-name: $branchnew git checkout $branchnew done git checkout master for k in $(git branch -ra --merged | egrep -v "(^\*|master)"); do branchnew=$(echo $k | sed -e "s/origin\///" | sed -e "s/remotes\///") echo branch-name: $branchnew git push origin --delete $branchnew done 

गलती से मास्टर की तुलना में किसी अन्य शाखा से कमांड चलाने से बचने के लिए मैं निम्न बाश स्क्रिप्ट का उपयोग करता हूं। अन्यथा, चल रहे git branch --merged | grep -v "\*" | xargs -n 1 git branch -d git branch --merged | grep -v "\*" | xargs -n 1 git branch -d git branch --merged | grep -v "\*" | xargs -n 1 git branch -d जो शाखा के मर्ज किए गए एक शाखा से मास्टर शाखा को हटा सकता है।

 #!/bin/bash branch_name="$(git symbolic-ref HEAD 2>/dev/null)" || branch_name="(unnamed branch)" # detached HEAD branch_name=${branch_name##refs/heads/} if [[ $branch_name == 'master' ]]; then read -r -p "Are you sure? [y/N] " response if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]; then git branch --merged | grep -v "\*" | xargs -n 1 git branch -d fi else echo "Refusing to delete branches that are not merged into '$branch_name'. Checkout master first." fi 

स्थानीय शाखाओं को हटाने के लिए जो मास्टर शाखा में विलय कर दिया गया है, मैं निम्नलिखित उपनाम ( git config -e --global ) का उपयोग कर रहा हूं:

 cleanup = "!git branch --merged master | grep -v '^*\\|master' | xargs -n 1 git branch -D" 

error: The branch 'some-branch' is not fully merged. से बचने के लिए मैं git branch -D का उपयोग कर रहा हूं error: The branch 'some-branch' is not fully merged. संदेश जबकि मेरे मौजूदा चेकआउट मास्टर ब्रांच से अलग हैं I

विंडोज़-मैनेजमेंट पायथन स्क्रिप्ट (क्योंकि वेटोथेथ रिपॉजिटरी पर git-sweep दबड़ा हुआ है):

 #!/usr/bin/env python # Remove merged git branches. Cross-platform way to execute: # # git branch --merged | grep -v master | xargs git branch -d # # Requires gitapi - https://bitbucket.org/haard/gitapi # License: Public Domain import gitapi repo = gitapi.Repo('.') output = repo.git_command('branch', '--merged').strip() for branch in output.split('\n'): branch = branch.strip() if branch.strip(' *') != 'master': print(repo.git_command('branch', '-d', branch).strip()) 

https://gist.github.com/techtonik/b3f0d4b9a56dbacb3afc

यदि आप हबफ्लो या गिटफ्लो जैसी शाखाओं का उपयोग कर रहे हैं तो आप मर्ज किए गए सुविधा की शाखाओं को निकालने के लिए इस आदेश का उपयोग कर सकते हैं:

git branch --merged | grep feature.* | grep -v "\*" | xargs -n 1 git branch -d

अगर आप स्थानीय शाखाओं को हटाना चाहते हैं जिन्हें विलय कर दिया गया है और साथ ही उनके रीमेट को हटा दें, तो यहां एक-लाइनर मुझे पसंद है:

 git branch --merged | xargs -I_br -- sh -c 'git branch -d _br; git push origin --delete _br' 
 for b in $(git branch -a | grep -v "\(master\|remotes\)"); do \ git branch -D $b; done && git fetch -p 

मान लें कि मेरे पास रिमोट नामित अपस्ट्रीम और मूल (GitHub शैली है, मेरा कांटा मूल है, अपस्ट्रीम अपस्ट्रीम है)।

मैं किसी स्वामी, प्रधान या अपस्ट्रीम से कुछ भी नहीं हटाना चाहता। मैं विकास शाखा को भी हटाना नहीं चाहता क्योंकि यह हमारी आम शाखा है जिसे हम पीआरएस से बनाते हैं।

सभी दूरस्थ शाखाएं, जिनके विलय किए गए हैं, उन्हें फ़िल्टर करें सूची बनाएं:

 git branch -r 

उस सूची से पंक्तियां निकालें जिसमें मैं जानता हूं कि शब्दों में शाखा नाम हैं I निकालना नहीं चाहते हैं:

 sed '/develop\|master\|HEAD\|upstream/d' 

संदर्भ नाम से रिमोट नाम को निकालें (मूल / कुछ ब्रैंच का मालिक बन जाता है):

 sed 's/.*\///' 

एक-लाइनर कॉल करने के लिए एक्सर का उपयोग करें:

 xargs git push --delete origin 

यह सब मिलकर पाइप करें:

 git branch -r --merged | sed '/develop\|master\|HEAD\|upstream/d' | sed 's/.*\///' | xargs git push --delete origin 

यह मुझे केवल कुछ शाखाओं के साथ छोड़ देगा जो मैंने काम किया है, लेकिन विलय नहीं किया है। तब आप उन्हें एक-एक करके हटा सकते हैं क्योंकि बहुत ज्यादा नहीं होना चाहिए

उन शाखाओं का पता लगाएं जिन्हें आप नहीं चाहते हैं:

 git branch -ar 

कहें कि शाखा 1, शाखा 2 और शाखा 3 आप हटाना चाहते हैं:

 git push --delete origin branch1 branch2 branch3 

मेरी बॉश स्क्रिप्ट योगदान मोमरोबीन के उत्तर पर ढीले आधार पर आधारित है।

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

 #!/bin/bash # exclude branches regex, configure as "(branch1|branch2|etc)$" excludes_default="(master|next|ag/doc-updates)$" excludes="__NOTHING__" includes= merged="--merged" local=1 remote=1 while [ $# -gt 0 ]; do case "$1" in -i) shift; includes="$includes $1" ;; -e) shift; excludes="$1" ;; --no-local) local=0 ;; --no-remote) remote=0 ;; --all) merged= ;; *) echo "Unknown argument $1"; exit 1 ;; esac shift # next option done if [ "$includes" == "" ]; then includes=".*" else includes="($(echo $includes | sed -e 's/ /|/g'))" fi current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/') if [ "$current_branch" != "master" ]; then echo "WARNING: You are on branch $current_branch, NOT master." fi echo -e "Fetching branches...\n" git remote update --prune remote_branches=$(git branch -r $merged | grep -v "/$current_branch$" | grep -v -E "$excludes" | grep -v -E "$excludes_default" | grep -E "$includes") local_branches=$(git branch $merged | grep -v "$current_branch$" | grep -v -E "$excludes" | grep -v -E "$excludes_default" | grep -E "$includes") if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then echo "No existing branches have been merged into $current_branch." else echo "This will remove the following branches:" if [ "$remote" == 1 -a -n "$remote_branches" ]; then echo "$remote_branches" fi if [ "$local" == 1 -a -n "$local_branches" ]; then echo "$local_branches" fi read -p "Continue? (y/n): " -n 1 choice echo if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then if [ "$remote" == 1 ]; then remotes=$(git remote) # Remove remote branches for remote in $remotes do branches=$(echo "$remote_branches" | grep "$remote/" | sed "s/$remote\/\(.*\)/:\1 /g" | tr -d '\n') git push $remote $branches done fi if [ "$local" == 1 ]; then # Remove local branches locals=$(echo "$local_branches" | sed 's/origin\///g' | tr -d '\n') if [ -z "$locals" ]; then echo "No branches removed." else git branch -d $(echo "$locals" | tr -d '\n') fi fi fi fi 

यदि आप अपने स्थानीय कंप्यूटर से निकाल रहे हैं, तो यह मेरा प्रत्यक्ष तरीका है:

बस जायें: C:\Repo\your-project\.git\refs\heads

प्रत्येक शाखा इस फ़ोल्डर के अंतर्गत बनाई गई एक फ़ाइल है, बस उन फ़ाइलों को निकालें जो आपकी शाखा नाम से मेल खाते हैं

विंडोज पर एक विधि खोजना मुश्किल है मैंने इसे इस तरह से समझ लिया, और उसने मुझे अपने विंडोज़ इंस्टॉलेशन पर बचाव किया।