मैं उन सभी शाखाओं को हटाना चाहता हूं जो आउटपुट में सूचीबद्ध हैं ...
$ git branch
... लेकिन एक कदम में , वर्तमान शाखा को रखते हुए । क्या यह संभव है? यदि हां, तो कैसे?
मैं उन सभी शाखाओं को हटाना चाहता हूं जो आउटपुट में सूचीबद्ध हैं ...
$ git branch
... लेकिन एक कदम में , वर्तमान शाखा को रखते हुए । क्या यह संभव है? यदि हां, तो कैसे?
जवाबों:
@Pankijs उत्तर के आधार पर, मैंने दो गिट एलियाज़ बनाए:
[alias]
# Delete all local branches but master and the current one, only if they are fully merged with master.
br-delete-useless = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
}; f"
# Delete all local branches but master and the current one.
br-delete-useless-force = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
}; f"
में जोड़ा जाना है ~/.gitconfig
और, @torek ने बताया:
ध्यान दें कि लोअरकेस
-d
"गैर-पूर्ण रूप से मर्ज की गई" शाखा को नहीं हटाएगा (प्रलेखन देखें)। उपयोग करने-D
से ऐसी शाखाएं नष्ट हो जाएंगी , भले ही यह "खो" जाने का कारण बन जाए; इसे बहुत सावधानी से उपयोग करें , क्योंकि यह शाखा को हटा देता है और साथ ही, ताकि सामान्य रूप से "आकस्मिक विलोपन से उबरने" सामान भी काम न करे।
मूल रूप से, कभी भी -force
संस्करण का उपयोग न करें यदि आप 300% सुनिश्चित नहीं हैं कि आप कुछ भी महत्वपूर्ण नहीं खोएंगे। क्योंकि यह हमेशा के लिए खो गया है ।
git branch branchname commitid
$ git branch | grep -v "master" | xargs git branch -D
मास्टर को छोड़कर सभी शाखाओं को हटा देगा (आप जिस शाखा को रखना चाहते हैं उसके साथ मास्टर बदलें, लेकिन फिर यह मास्टर को हटा देगा)
grep -v ^*
।
master-copy
उदाहरण के लिए
grep -v "^ *master$"
grep -v "master\|my-other-branch"
।
पहला (उस शाखा पर स्विच करें जिसे आप रखना चाहते हैं> पूर्व : मास्टर ):
git checkout master
दूसरा (सुनिश्चित करें कि आप मास्टर हैं )
git branch -D $(git branch)
git branch -D $(git branch).Trim()
।
git branch -d
(या -D
) कई शाखा नामों की अनुमति देता है, लेकिन कम से कम थोड़ा सा कोड लिखे बिना "सभी स्थानीय शाखाओं को स्वचालित रूप से आपूर्ति करना, जो अब मैं एक को छोड़कर" हूं, को स्वचालित रूप से आपूर्ति करना थोड़ा मुश्किल है।
"सर्वश्रेष्ठ" (औपचारिक रूप से सही) विधि का उपयोग git for-each-ref
शाखा नाम प्राप्त करने के लिए किया जाता है:
git for-each-ref --format '%(refname:short)' refs/heads
लेकिन तब यह पता लगाना और भी कठिन हो जाता है कि आप किस शाखा में हैं ( git symbolic-ref HEAD
यदि आप फैंसी स्क्रिप्ट लिखना चाहते हैं तो इसके लिए "औपचारिक रूप से सही है" विधि)।
अधिक सुविधाजनक रूप से, आप उपयोग कर सकते हैं git branch
, जो आपके स्थानीय शाखा नामों को दो स्थानों से पहले या (वर्तमान शाखा के लिए) तारांकन द्वारा प्रिंट करता है *
। इसलिए, *
संस्करण को निकालने के लिए इसे किसी चीज़ के माध्यम से चलाएं और आप अंतरिक्ष से अलग शाखा नामों के साथ छोड़ दें , जिन्हें आप इसके बाद पास कर सकते हैं git branch -d
:
git branch -d $(git branch | grep -v '^*')
या:
git branch | grep -v '^*' | xargs git branch -d
ध्यान दें कि लोअरकेस -d
"गैर-पूर्ण रूप से मर्ज की गई" शाखा को नहीं हटाएगा (प्रलेखन देखें)। उपयोग करने -D
से ऐसी शाखाएं नष्ट हो जाएंगी, भले ही यह "खो" जाने का कारण बन जाए; इसे बहुत सावधानी से उपयोग करें, क्योंकि यह शाखा को हटा देता है और साथ ही, ताकि सामान्य रूप से "आकस्मिक विलोपन से उबरने" सामान भी काम न करे।
git branch -D $(git branch | grep -v '^*')
, यदि आप उन शाखाओं को हटाना चाहते हैं जो विलय कर चुके हैं।
सभी मर्ज की गई शाखाओं को हटाने के लिए (वर्तमान को छोड़कर -v ‘*’
):
git branch --merged | grep -v '*' | xargs git branch -D
मैं भी रेपो को पूरी तरह से साफ करने के लिए इस तरह का आदेश देता हूं:
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
यहां से ले जाया गया ।
विशिष्ट शाखा को छोड़कर सभी शाखाओं को हटा दें :
git branch | grep -v "branch name" | xargs git branch -D
विकास और मास्टर को छोड़कर सभी स्थानीय शाखाओं को हटा दें
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
Windows के लिए, Powershell उपयोग में:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
स्थानीय रूप से सभी मर्ज की गई शाखा हटाएं:
git branch -D `git branch --merged | grep -v \* | xargs`
विशिष्ट शाखा को छोड़कर सभी शाखाओं को हटा दें :
git branch | grep -v "branch name" | xargs git branch -D
विकास और मास्टर को छोड़कर सभी स्थानीय शाखाओं को हटा दें
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
मैंने एक बार अपने विंडोज वातावरण के लिए यह निर्माण किया था। शायद यह किसी और की मदद करेगा। निष्पादन के दौरान, मास्टर और वर्तमान शाखा को हटाया नहीं जाता है । अन्य सभी मर्ज की गई शाखाओं को हटा दिया जाएगा।
@echo off
cd PATH_TO_YOUR_REPO
REM -- Variable declerations
set "textFile=tempBranchInfo.txt"
set "branchToKeep=master"
set "branchToReplaceWith="
git branch --merged > %textFile%
REM -- remove "master" from list to keep the branch
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%branchToKeep%=%branchToReplaceWith%!
endlocal
)
REM -- execute branch delete commands
for /f "delims=" %%a in (%textFile%) do (
git branch -D %%a
)
REM -- remove temp-file with branch information inside
DEL %textFile%
REM -- show local branches after the cleaning
echo Local branches:
git branch
pause
exit
इसलिए मुझे यहां बहुत सी हार्ड कोडेड शाखा के नाम दिखाई देते हैं ... और मुझे लगता है कि यहां मेरा उत्तर प्रश्न की "वर्तमान शाखा" के हिस्से के लिए अधिक सटीक है, जबकि यह एकल लाइन रखने और मेरे जैसे नए-नए शब्दों को पढ़ने के लिए पठनीय है। सिर्फ क्रेडिट को रखने के लिए जहां यह कारण है, उत्तर स्पष्ट रूप से @ pankijs के उत्तर पर भी आधारित है।
git branch | grep -v $(git branch --show-current) | xargs git branch -d
और मैंने इसे एक लाइन पर अपने .bash_aliases में डेबियन एस्वेल में अलियास किया है।
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(हालांकि मुझे लगता है कि कुछ कमांड लाइनों पर चलने के लिए उप-कमांड के लिए कुछ बैश सुविधाओं को सक्षम करने की आवश्यकता है)
मैं इसका उपयोग करता हूं क्योंकि मैं उस चीज में अधिक चयनात्मक हो जाता हूं जिसे मैं हटाना नहीं चाहता। यह नीचे आदेश मास्टर, विकास और वर्तमान शाखा को छोड़कर हर शाखा को हटा देता है।
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
इसलिए मैंने इसे अपने अंदर डाल लिया ~/.zshrc
delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches
IMHO, स्थानीय शाखाओं को हटाने का सबसे सुरक्षित तरीका है:
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
इसके अलावा, इस विषय से संबंधित अधिक जानकारी आप सभी स्थानीय गिट शाखाओं को हटा सकते हैं
gone
मार्कर को प्रिंट करने के लिए जिसे आपको -vv
दो बार प्रयोग करना चाहिए (क्रिया दो बार), जबकि -a
यह आपकी मदद नहीं करेगा (यह दूरस्थ शाखाओं को भी सूचीबद्ध करता है)