मैं स्थानीय और दूरस्थ रूप से एक Git शाखा को कैसे हटाऊं?


16945

मैं स्थानीय और दूरस्थ रूप से एक शाखा को हटाना चाहता हूं।

दूरस्थ शाखा को हटाने का प्रयास विफल

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject

* [new branch] bugfix -> origin/bugfix
Already up-to-date.

मुझे remotes/origin/bugfixस्थानीय और दूरस्थ रूप से शाखा को सफलतापूर्वक हटाने के लिए अलग से क्या करना चाहिए ?


1055
मॉडरेटर नोट: यदि आप इस प्रश्न का उत्तर देने का इरादा रखते हैं, तो ध्यान दें कि पहले से ही 40 उत्तर पोस्ट किए गए हैं। क्या आपका नया उत्तर कोई पर्याप्त मूल्य जोड़ देगा?
रॉबर्ट हार्वे

54
नोट: Git 2.5+ (Q2 2015) के लिए, सटीक संदेश " deleted remote-tracking branch" होगा: github.com/git/git/commit/…
VONC

आपको इस स्क्रिप्ट में दिलचस्पी हो सकती है, जो एक स्थानीय शाखा और एक दूरस्थ को हटाने के बीच के अंतर को सरल करता है: tlbx.app/blog/delete-any-git-branch-the-easy-way
मिग

@ रॉबर्टबरीवे केवल 39 अब
एडम

@ एडाम: 81. 42 जवाब विभिन्न कारणों से हटा दिए गए थे। किसी विशेष विषय के साथ जनता की बेरोज़गारी का जुनून जीवन के महानतम रहस्यों में से एक है।
रॉबर्ट हार्वे

जवाबों:


21420

कार्यकारी सारांश

$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>

ध्यान दें कि ज्यादातर मामलों में दूरस्थ नाम है origin। ऐसे मामले में आपको कमांड का उपयोग करना होगा।

$ git push -d origin <branch_name>

स्थानीय शाखा हटाएं

स्थानीय शाखा को हटाने के लिए निम्नलिखित में से किसी एक का उपयोग करें:

$ git branch -d branch_name
$ git branch -D branch_name

नोट:-d विकल्प के लिए एक उपनाम है --delete, जो केवल शाखा को हटा देता है कि वह पहले से पूरी तरह से अपने अपस्ट्रीम शाखा में विलय कर दिया गया। आप इसका उपयोग भी कर सकते हैं -D, जो इसके लिए एक अन्य नाम है --delete --force, जो शाखा को "विलीन स्थिति के बावजूद" हटाता है। [स्रोत: man git-branch]

दूरस्थ शाखा हटाएँ [8-Sep-2017 को अपडेट किया गया]

Git v1.7.0 के रूप में , आप एक दूरस्थ शाखा का उपयोग करके हटा सकते हैं

$ git push <remote_name> --delete <branch_name>

जिससे याद रखना आसान हो सकता है

$ git push <remote_name> :<branch_name>

जिसे Git v1.5.0 में जोड़ा गया था "एक दूरस्थ शाखा या एक टैग को हटाने के लिए।"

पर शुरू Git v2.8.0 आप भी उपयोग कर सकते हैं git pushके साथ -dके लिए एक उपनाम के रूप विकल्प --delete

इसलिए, आपके द्वारा स्थापित Git का संस्करण निर्धारित करेगा कि क्या आपको आसान या कठिन सिंटैक्स का उपयोग करने की आवश्यकता है।

दूरस्थ शाखा हटाएं [मूल जवाब 5-जनवरी -2010 से]

स्कॉट चैकोन द्वारा प्रो गिट के अध्याय 3 से :

दूरस्थ शाखाओं को हटाना

मान लीजिए कि आप एक दूरस्थ शाखा के साथ हैं - कहते हैं, आप और आपके सहयोगी एक विशेषता के साथ समाप्त हो गए हैं और इसे अपने दूरस्थ की मास्टर शाखा में विलय कर दिया है (या जो भी शाखा आपकी स्थिर कोड-लाइन में है)। आप सुव्यवस्थित सिंटैक्स का उपयोग करके एक दूरस्थ शाखा को हटा सकते हैं git push [remotename] :[branch]। यदि आप सर्वर से अपनी सर्वर-फिक्स शाखा को हटाना चाहते हैं, तो आप निम्न कार्य करते हैं:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

बूम। आपके सर्वर पर और शाखाएँ नहीं। आप इस पृष्ठ को डॉग-ईयर करना चाह सकते हैं, क्योंकि आपको उस कमांड की आवश्यकता होगी, और आप सिंटैक्स को भूल जाएंगे। इस कमांड को याद रखने का एक तरीका git push [remotename] [localbranch]:[remotebranch]सिंटैक्स को याद करके है कि हम पहले थोड़ा अधिक हो गए थे। यदि आप इस [localbranch]हिस्से को छोड़ देते हैं , तो आप मूल रूप से कह रहे हैं, "मेरी तरफ से कुछ भी मत लो और इसे बनाओ [remotebranch]।"

मैंने जारी किया git push origin: bugfixऔर इसने खूबसूरती से काम किया। स्कॉट चैकोन राइट मैं चाहता हूँ था कुत्ता कान उस पृष्ठ (या स्टैक ओवरफ़्लो पर इस का उत्तर देकर लगभग कुत्ता कान)।

फिर आपको अन्य मशीनों पर इसे निष्पादित करना चाहिए

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

परिवर्तनों को फैलाने के लिए।


353
git fetch --all --pruneसर्वर पर दूरस्थ शाखा को हटाने के बाद अन्य मशीनों पर करना न भूलें । ||| अन्य शाखाओं के साथ स्थानीय शाखा को git branch -dहटाने और दूरस्थ शाखा को हटाने के बाद git push origin --deleteभी "अप्रचलित ट्रैकिंग शाखाएं" हो सकती हैं (उन्हें देखने के लिए git branch -a)। इनसे छुटकारा पाने के लिए git fetch --all --prune
ट्रेवर बॉयड स्मिथ

14
@ TrevorBoydSmith की git branch -aसभी शाखाओं को देखने के अलावा , आप git branch -rकेवल दूरस्थ शाखाओं को देखने के लिए भी उपयोग कर सकते हैं । इन्हें भी देखें git remote show origin- स्रोत: gitready.com/intermediate/2009/02/13/list-remote-branches.html
सैंड्रा

17
मुझे git branch -D Branch_Nameस्थानीय शाखा से छुटकारा पाने के लिए भागना पड़ा
कोल्ब कैन्यन

11
@KolobCanyon आपको केवल -D का उपयोग करना होगा यदि शाखा को दूसरी शाखा में विलय नहीं किया गया है।
BTRUE

3
सवाल यह था कि "स्थानीय रूप से और गीताबुब दोनों पर रीमोट्स / मूल / बगिफ़ शाखा को सफलतापूर्वक हटाने के लिए मुझे अलग से क्या करने की आवश्यकता है?" आपके अपडेट किए गए उत्तर में कमांड चलाने के बाद, स्थानीय शाखा अभी भी मौजूद है। अच्छा होगा यदि स्वीकृत उत्तर पूर्ण उत्तर हो। इसके बिल्कुल कितना मुश्किल Git सरल कार्य करता है पर अद्भुत ...
jww

3316

दूरस्थ शाखाओं को हटाने के लिए मैथ्यू का जवाब बहुत अच्छा है और मैं भी स्पष्टीकरण की सराहना करता हूं, लेकिन दो आज्ञाओं के बीच एक सरल अंतर बनाने के लिए:

अपनी मशीन से स्थानीय शाखा निकालने के लिए :

git branch -d {the_local_branch}( -Dविलय की स्थिति की जाँच किए बिना शाखा को हटाने के लिए उपयोग करने के बजाय)

सर्वर से दूरस्थ शाखा निकालने के लिए :

git push origin --delete {the_remote_branch}

संदर्भ: Git: एक शाखा हटाएं (स्थानीय या दूरस्थ)


250
अच्छी तरह से @megido -Dहटाए गए मजबूर, -dआप एक चेतावनी देता है कि वह पहले से में विलय कर दिया नहीं है।
TankorSmash

8
यदि आपकी स्थानीय शाखा का स्वामी के साथ विलय नहीं हुआ है और 'git branch -d your_branchआप भाग जाएंगे तो आप त्रुटि करेंगे जैसेerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
गीक्स

12
मैं -D के बजाय -d का उपयोग करने का सुझाव दूंगा क्योंकि यह अधिक सुरक्षित है। अगर -d अनमैरिड कमिट्स के कारण फेल हो जाता है तो आपको यह आकलन करने की जरूरत है कि और यदि हटाने के लिए निश्चित रूप से ठीक है तो -D का उपयोग करें।
रॉबी

7
रिपॉजिटरी क्लोन के साथ अन्य जहां दूरस्थ शाखाएं हटा दी गई हैं git remote prune <name>(जैसे git remote prune origin) स्थानीय रूप से बासी शाखाओं को हटाने के लिए चलना चाहिए (जैसे ) कि रिमोट में मौजूद नहीं है।
code_dredd

3
मुझे लगता है कि अगर यह वर्तमान सिर के साथ विलय नहीं है, तो एक चेतावनी देता है। यदि आपको स्पष्टता की आवश्यकता है, तो मैं इस आदेश की सिफारिश करता हूं। git branch -a --merged origin/masterयह किसी भी शाखा को सूचीबद्ध करेगा, स्थानीय और दूरस्थ दोनों; जिसे गुरु में मिला दिया गया है। यहाँ अतिरिक्त जानकारी
एरिक

2040

लघु जवाब

यदि आप निम्नलिखित कमांड के अधिक विस्तृत स्पष्टीकरण चाहते हैं, तो अगले अनुभाग में लंबे उत्तर देखें।

दूरस्थ शाखा हटाना

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 1.7.0 or newer)
git push origin :<branch>          # Git versions older than 1.7.0

स्थानीय शाखा हटाना

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

स्थानीय रिमोट ट्रैकिंग शाखा को हटाना

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p      # Shorter

उत्तर है : वहाँ से हटाने के लिए तीन अलग-अलग शाखाओं कर रहे हैं!

जब आप स्थानीय और दूरस्थ दोनों शाखाओं को हटाने का काम कर रहे हों, तो ध्यान रखें कि इसमें तीन अलग-अलग शाखाएँ शामिल हैं :

  1. स्थानीय शाखा X
  2. दूरस्थ मूल शाखा X
  3. स्थानीय दूरस्थ ट्रैकिंग शाखा origin/Xजो दूरस्थ शाखा को ट्रैक करती है X

तीन शाखाओं का दृश्य

मूल पोस्टर का इस्तेमाल किया:

git branch -rd origin/bugfix

जिसने केवल उसकी स्थानीय रिमोट-ट्रैकिंग शाखा को हटा दिया origin/bugfix, और वास्तविक रिमोट शाखा को bugfixचालू नहीं किया origin

आरेख 2

उस वास्तविक दूरस्थ शाखा को हटाने के लिए , आपको आवश्यकता है

git push origin --delete bugfix

आरेख ३

अतिरिक्त जानकारिया

निम्नलिखित अनुभाग आपके दूरस्थ और दूरस्थ-ट्रैकिंग शाखाओं को हटाते समय विचार करने के लिए अतिरिक्त विवरणों का वर्णन करते हैं।

दूरस्थ शाखाओं को हटाने के लिए पुश करने से दूरस्थ ट्रैकिंग शाखाएँ भी हटा दी जाती हैं

ध्यान दें कि Xकमांड लाइन से रिमोट शाखा को git push हटाने से स्थानीय रिमोट-ट्रैकिंग शाखा को भी हटा दिया जाएगा origin/X , इसलिए अप्रचलित रिमोट-ट्रैकिंग शाखा को git fetch --pruneया उसके साथ जोड़ना आवश्यक नहीं है git fetch -p। हालांकि, अगर आप इसे वैसे भी करते हैं, तो यह दुख नहीं होगा।

आप यह सत्यापित कर सकते हैं कि रिमोट-ट्रैकिंग शाखा origin/Xको निम्न चलाकर भी हटा दिया गया था:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखा की उत्पत्ति / एक्स को देखकर

यदि आपने अपनी दूरस्थ शाखा Xको कमांड लाइन (जैसे ऊपर) से नहीं हटाया है , तो आपकी स्थानीय रिपॉजिटरी में अभी भी (अब अप्रचलित) रिमोट-ट्रैकिंग शाखा होगी origin/X। यह तब हो सकता है यदि आपने उदाहरण के लिए GitHub के वेब इंटरफेस के माध्यम से एक दूरस्थ शाखा को हटा दिया।

इन अप्रचलित रिमोट-ट्रैकिंग शाखाओं को हटाने का एक विशिष्ट तरीका (Git संस्करण 1.6.6 के बाद से) केवल या छोटे के git fetchसाथ चलना है । ध्यान दें कि यह किसी भी दूरस्थ शाखा के लिए सभी अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखाओं को हटा देता है जो अब रिमोट पर मौजूद नहीं हैं :--prune-p

git fetch origin --prune
git fetch origin -p # Shorter

यहां 1.6.6 रिलीज नोट्स (जोर मेरा) से प्रासंगिक उद्धरण है :

"git fetch" सीखा --all और --multipleविकल्प, कई रिपोजिटरी से लाने के लिए, और --pruneरिमोट ट्रैकिंग शाखाओं को हटाने के लिए विकल्प जो बासी चले गए। ये "git रिमोट अपडेट" और "git Remote prune" को कम आवश्यक बनाते हैं (हालांकि "रिमोट अपडेट" को हटाने की कोई योजना नहीं है और न ही "Remote prune", हालांकि)।

अप्रचलित रिमोट-ट्रैकिंग शाखाओं के लिए ऊपर स्वचालित छंटाई का विकल्प

वैकल्पिक रूप से, अपनी अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखाओं के बारे में बताने के बजाय git fetch -p, आप मैन्युअल रूप से शाखा (तों) --remoteया -rझंडों को हटाकर अतिरिक्त नेटवर्क संचालन करने से बच सकते हैं :

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

यह सभी देखें


आपके चित्रण से, मैं देख सकता हूं कि स्थानीय क्लोन रेपो और दूरस्थ मूल रेपो हैं। तो कम से कम दो भौतिक शाखाएँ हैं। हटाने के लिए तीसरी शाखा कहां है? क्या तीसरी शाखा केवल एक संकेत है जो स्थानीय क्लोन रेपो में प्रतिबद्ध है?
huggie

6
@ ह्यूगी यह बहुत सही है। Git में शाखाएँ केवल प्रतिबद्धताओं से जुड़े बुकमार्क हैं। तो ऊपर मेरे ग्राफ़ में, स्थानीय क्लोन (2 शाखाएं) में बुकमार्क Xऔर हैं origin/X, और फिर Xरिमोट (3 शाखाएं) बना रहा है।

6
दूरस्थ ट्रैकिंग शाखा के लिए +1। जब आप किसी और की शाखा को क्लोन करते हैं, तो यह शाखा समस्याओं का कारण बनती है। यह आपके आवागमन पर नज़र रखता है और आपसे पूछता है कि क्या आप उस व्यक्ति की शाखा में जाना चाहते हैं।
करमीत_इसे_तथा

1
अकेले ग्राफिक्स ही गोल्ड वेल किए गए हैं।
मोगेंस ट्रैशर्डके

1
भविष्य के पाठकों के लिए: जो @Kermit_ice_tea ऊपर बात कर रहा है, वह एक स्थानीय शाखा है (जैसा कि इस उत्तर में वर्णित है), दूरस्थ ट्रैकिंग शाखा नहीं । जब एक स्थानीय शाखा के पास इसके लिए "अपस्ट्रीम शाखा" कॉन्फ़िगर की जाती है, तो यह डिफ़ॉल्ट रूप से उस दूरस्थ शाखा से खींच और धक्का देगा। एक स्थानीय शाखा जिसमें "अपस्ट्रीम शाखा" होती है, उसे "ट्रैकिंग शाखा" के रूप में संदर्भित किया जाता है , इसलिए समान शब्दावली के कारण रिमोट-ट्रैकिंग शाखाओं के साथ भ्रमित करना आसान है ।
डेविड पी

1518

एक शाखा को हटाने के लिए कदम:

दूरस्थ शाखा को हटाने के लिए :

git push origin --delete <your_branch>

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

1: git branch -D <branch_name>

2: git branch --delete --force <branch_name>  # Same as -D

3: git branch --delete  <branch_name>         # Error on unmerge

समझाएं: ठीक है, जरा समझाएँ कि यहाँ क्या चल रहा है!

सीधे शब्दों में करना git push origin --deleteकरने के लिए अपने रिमोट शाखा हटाना ही , अंत में शाखा का नाम जोड़ सकते हैं और यह हटा दिया जाएगा और यह पुश करने के लिए दूरदराज के एक ही समय में ...

इसके अलावा, git branch -Dजो केवल स्थानीय शाखा हटाना केवल ! ...

-Dके लिए स्टैंड --delete --forceजो शाखा को नष्ट करेगा भी यह (बल हटाने) का विलय नहीं किया है, लेकिन आप भी उपयोग कर सकते हैं -dजो के लिए खड़ा है --deleteजो शाखा मर्ज स्थिति के संबंधित एक त्रुटि फेंक ...

मैं भी चरणों को दिखाने के लिए नीचे की छवि बनाता हूं :

Git में दूरस्थ और स्थानीय शाखा हटाएं


48
git branch -aस्थानीय और दूरस्थ शाखाओं को प्रदर्शित करेगा। यह आरेख परिचय के लिए आपकी मदद करेगा।
लोरेंसकेन

4
ध्यान दें कि यदि आप उस शाखा पर सेटिंग कर रहे हैं जिसे आप हटाना चाहते हैं, तो आपको स्थानीय शाखा को हटाने से पहले एक शाखा को चेक करना होगा, जिसे आपको हटाने की आवश्यकता है (जैसे: मास्टर)।
बद्र आमेर

जब शाखाएं मूल रूप से नष्ट हो जाती हैं, तो आपका स्थानीय भंडार उस पर ध्यान नहीं देगा। आपके पास अभी भी उन शाखाओं के अपने स्थानीय रूप से कैश्ड संस्करण होंगे (जो वास्तव में अच्छा है) लेकिन गिट शाखा-ए अभी भी उन्हें दूरस्थ शाखाओं के रूप में सूचीबद्ध करेगी। आप स्थानीय रूप से उस जानकारी को साफ कर सकते हैं: git remote prune originहटाए गए शाखाओं की आपकी स्थानीय प्रतियां इसके द्वारा नहीं निकाली जाती हैं। उसी प्रभाव का उपयोग करके प्राप्त किया जाता हैgit fetch --prune
vibs2006

2
छवि विचलित करने वाली और बहुत बड़ी है और उत्तर में कुछ नहीं जोड़ती है। मुझे उम्मीद है कि यह एसओ पर एक प्रवृत्ति नहीं बन जाएगा।
jmiserez

797

आप दूरस्थ शाखा को हटाने के लिए निम्न का भी उपयोग कर सकते हैं

git push --delete origin serverfix

जो जैसा करता है, वैसा ही करता है

git push origin :serverfix

लेकिन यह याद रखना आसान हो सकता है।


1
... और उपयोग करने के लिए सुरक्षित: O
cst1992

1
आप उस स्थानीय शाखा को हटाने के बारे में भूल गए हैं जिसे निम्न द्वारा किया जा सकता है: git branch -d <local_branch>या git branch -D <local_branch>बलपूर्वक हटाने के लिए
अमित डैश

370

युक्ति: जब आप शाखाओं का उपयोग करके हटाते हैं

git branch -d <branchname> # Deletes local branch

या

git push origin :<branchname> # Deletes remote branch

केवल संदर्भ हटा दिए जाते हैं। भले ही शाखा वास्तव में रिमोट पर हटा दी गई है, लेकिन इसके संदर्भ अभी भी आपकी टीम के सदस्यों के स्थानीय रिपॉजिटरी में मौजूद हैं। इसका मतलब यह है कि टीम के अन्य सदस्यों के लिए डिलीट ब्रांच तब भी दिखाई देती हैं जब वे ए git branch -a

इसे हल करने के लिए, आपकी टीम के सदस्य हटाए गए शाखाओं के साथ प्रून कर सकते हैं

git remote prune <repository>

यह आमतौर पर है git remote prune origin


14
आपको स्पष्ट करना चाहिए कि उपरोक्त git pushऑपरेशन स्थानीय शाखा और दूरस्थ शाखा को हटा देता है ।
अन्निका बैकस्ट्रॉम

22
ध्यान दें कि git remote pruneअप्रचलित रिमोट-ट्रैकिंग शाखाओं को हटाने के लिए कुछ हद तक अप्रचलित तरीका है, इसे करने का नया तरीका उपयोग करना है git fetch --pruneया git fetch -p

1
@RRMadhav, वास्तव में आप हटाए गए शाखा को हटाने के बाद नहीं देखेंगे क्योंकि दूरस्थ शाखा का संदर्भ आपके लिए स्थानीय रूप से हटा दिया जाएगा। आपकी टीम के किसी अन्य व्यक्ति ने उस शाखा की जाँच की है और उसके पास अभी भी वह संदर्भ होगा और तब भी वह देखेगा जब तक कि वह शाखा को प्रदर्शित नहीं करता।
डे

361

यदि आप किसी शाखा को हटाना चाहते हैं, तो पहले हटाए जाने वाली शाखा के अलावा शाखा को चेकआउट करें।

git checkout other_than_branch_to_be_deleted

स्थानीय शाखा को हटाना:

git branch -D branch_to_be_deleted

दूरस्थ शाखा हटाना:

git push origin --delete branch_to_be_deleted

260
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

7
ध्यान दें कि विलोपन को -D मजबूर करता है। इसका उपयोग करना हमेशा बेहतर होता है -d, जो आपको कुछ खतरनाक करने की आवश्यकता को याद दिलाएगा।
जोनाथन रेनहार्ट 1

13
आहाहः :) यह आप पर निर्भर है: यदि आप रोना चाहते हैं तो डी को रोते हुए या -डी को देखना चाहते हैं।
फेलिप

224

यह सरल है: बस निम्नलिखित कमांड चलाएँ:

Git शाखा को स्थानीय और दूरस्थ रूप से हटाने के लिए, पहले इस कमांड का उपयोग करके स्थानीय शाखा को हटाएं:

git branch -d example

(यहां exampleशाखा का नाम है)

और उसके बाद, इस कमांड का उपयोग करके दूरस्थ शाखा को हटा दें:

git push origin :example

199

एक और तरीका है:

git push --prune origin

चेतावनी: यह उन सभी दूरस्थ शाखाओं को हटा देगा जो स्थानीय रूप से मौजूद नहीं हैं। या अधिक व्यापक रूप से,

git push --mirror

प्रभावी रूप से दूरस्थ रिपॉजिटरी को रिपॉजिटरी की स्थानीय कॉपी की तरह बना देगा (स्थानीय हेड्स, रीमोट्स और टैग रिमोट पर मिरर किए गए हैं)।


1
git push --prune उत्पत्ति ने मेरे लिए gitlab पर कुछ नहीं किया: git clone git: //repo.it; git शाखा -d -r उत्पत्ति / कुछ-शाखाएँ; git push - अप्रत्यक्ष उत्पत्ति; पैदावार: सब कुछ अप-टू-डेट; git fetch; स्थानीय रूप से हटाई गई शाखाओं को वापस लाता है; गिट धक्का - सिर; अब वे वास्तव में चले गए हैं!
eMBee

165

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

alias git-shoot="git push origin --delete"

तब आप कॉल कर सकते हैं:

git-shoot branchname

11
मैं समाप्त हो गया, बस अपने ".conconfig शूट" में उर्फ ​​"शूट" को जोड़ दूं
hdost

यदि आपकी उत्पत्ति एक एटलसियन स्टैश है और शाखा को डिफ़ॉल्ट के रूप में सेट किया गया है, तो आपको एक त्रुटि मिलेगी "डिफ़ॉल्ट रूप से, वर्तमान शाखा को हटाने से इनकार किया जाता है ..."। मुझे हटाने से पहले मुझे किसी अन्य शाखा को इंगित करने के लिए Stash में डिफ़ॉल्ट शाखा को बदलना होगा।
०२:०४

यह पूरी तरह से सरल है जैसा कि आपने किया है, लेकिन फी जीआईटी आपको कस्टम कमांड बनाने की सुविधा भी देता है। रखो git push origin --delete $1अपने पथ कहा जाता है पर एक फ़ाइल में git-shootऔर git shoot branchnameभी काम करेगा।
Mahemoff

132

स्थानीय रूप से हटाएं:

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

git branch -d <branch_name>

जबरन एक शाखा हटाने के लिए, का उपयोग -Dकरने के बजाय -d

git branch -D <branch_name>

दूरस्थ रूप से हटाएं:

दो विकल्प हैं:

git push origin :branchname

git push origin --delete branchname

मेरा सुझाव है कि आप दूसरे तरीके का उपयोग करें क्योंकि यह अधिक सहज है।


129

जनवरी 2013 के बाद से, GitHub ने Delete branchआपके "शाखाओं" पृष्ठ में प्रत्येक शाखा के बगल में एक बटन शामिल किया ।

प्रासंगिक ब्लॉग पोस्ट: शाखाएं बनाएं और हटाएं


3
मैंने केवल इस वर्ष जीथब का उपयोग करना शुरू कर दिया था, इसलिए मैं सोच रहा था कि यह इतना उच्च श्रेणी का प्रश्न क्यों था, और शीर्ष उत्तरों में से कोई भी इसे जीथब वेब इंटरफेस से हटाने का सुझाव क्यों नहीं दे रहा था! दिलचस्प है कि यह केवल एक हालिया जोड़ है।
कैम जैक्सन

6
मैं इसे इंगित करने जा रहा था। ध्यान दें कि बटन आपकी स्थानीय शाखा को नहीं
हटाएगा

126

यदि आप इन दोनों चरणों को एक ही आदेश के साथ पूरा करना चाहते हैं, तो आप इसे नीचे जोड़कर अपने लिए एक उपनाम बना सकते हैं ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

वैकल्पिक रूप से, आप इसे अपने वैश्विक विन्यास में कमांड लाइन से जोड़ सकते हैं

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

नोट : यदि -d(लोअरकेस डी) का उपयोग किया जाता है , तो शाखा केवल तभी हटा दी जाएगी जब इसे विलय कर दिया गया हो। हटाए जाने के लिए बाध्य करने के लिए, आपको -D(अपरकेस डी) का उपयोग करना होगा ।


6
यह वही है जिसे मैं देख रहा था। मेरा स्वयं का शेल फ़ंक्शन उर्फ ​​ने काम नहीं किया (अप्रत्याशित EOF) और मैं यह पता नहीं लगा सका कि क्यों, लेकिन यह बहुत अच्छा काम करता है! केवल बदल रहा जगह बनाया गया था &&के साथ ;इतना है कि पहले आदेश दूसरा विफल रहता है, भले ही अभी भी निष्पादित करेंगे (कभी कभी केवल स्थानीय या केवल दूरस्थ मौजूद है)।
user1021726

115

अपनी शाखा को स्थानीय और दूरस्थ रूप से हटाने के लिए

  • मास्टर शाखा को चेकआउट - git checkout master

  • अपनी दूरस्थ शाखा हटाएं - git push origin --delete <branch-name>

  • अपनी स्थानीय शाखा हटाएं - git branch --delete <branch-name>


112

आप इसका उपयोग करके भी कर सकते हैं git remote prune origin

$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
 * [pruned] origin/some-branchs

यह एक git branch -rसूची से दूरस्थ-ट्रैकिंग शाखाओं को चुभता है और हटाता है ।


108

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

grb delete branch

मुझे लगता है कि मैं भी publishऔर trackअक्सर आदेशों का उपयोग करता हूं ।


98

एक एक लाइनर आदेश को हटाने के लिए दोनों को स्थानीय और दूरस्थ :

D=branch-name; git branch -D $D; git push origin :$D

या नीचे दिए गए उपनाम को अपने ~ / .itconfig में जोड़ें । उपयोग:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"

17
⚠️ git branch -Dकिसी स्क्रिप्ट में सावधानी से उपयोग करें , क्योंकि यह बिना जांच के किसी शाखा को बलपूर्वक हटा देती है। -dसुरक्षित होने के लिए उपयोग करें ।
कैसरसोल

94

शाखाओं को हटाना

मान लें कि शाखा "संपर्क-फ़ॉर्म" पर हमारा काम पूरा हो गया है और हमने इसे पहले ही "मास्टर" में एकीकृत कर दिया है। चूंकि हमें अब इसकी आवश्यकता नहीं है, हम इसे (स्थानीय रूप से) हटा सकते हैं:

$ git branch -d contact-form

और दूरस्थ शाखा को हटाने के लिए:

git push origin --delete contact-form

87

दूरस्थ शाखा हटाएं

git push origin :<branchname>

स्थानीय शाखा हटाएं

git branch -D <branchname>

स्थानीय शाखा चरण हटाएं:

  1. दूसरी शाखा को चेकआउट करें
  2. स्थानीय शाखा हटाएं

3
क्या दूरस्थ शाखा विलोपन के बाद "गिट पुश" की आवश्यकता होती है?
समिथा चतुरंग

@SamithaChathuranga नहीं, git push origin :<branchname>पहले से ही एक 'खाली' शाखा को दूरस्थ (इसलिए दूरस्थ शाखा को हटाता है) को धक्का देता है
Michał Szajbe

86

सीधे शब्दों में कहें:

git branch -d <branch-name>
git push origin :<branch-name>

यह काम करता है अगर इसकी अपनी शाखा हो। लेकिन अगर आप रेपो में सभी अनावश्यक शाखाओं की छंटनी कर रहे हैं (जिनमें से कुछ आपकी नहीं हैं) तो यह पर्याप्त नहीं होगा
Kermit_ice_tea


81

अब आप इसे GitHub डेस्कटॉप एप्लिकेशन के साथ कर सकते हैं ।

एप्लिकेशन लॉन्च करने के बाद

  1. शाखा वाले प्रोजेक्ट पर क्लिक करें
  2. उस शाखा पर स्विच करें जिसे आप हटाना चाहते हैं

    स्विचिंग शाखा

  3. "ब्रांच" मेनू से, "अनब्रिज़्म ..." का चयन करें, जो कि GitHub सर्वर से डिलीट की गई ब्रांच है।

    अप्रकाशित शाखा

  4. "शाखा" मेनू से, अपने स्थानीय मशीन से शाखा को हटाने के लिए '' " शाखा_नाम " ... 'का चयन करें, (जिस मशीन पर आप वर्तमान में काम कर रहे हैं, उसे एकेए करें )

    स्थानीय शाखा हटाएं


15
मैं निराश नहीं हुआ, लेकिन मेरी सोच यह है कि यह निश्चित रूप से मदद नहीं कर रहा है। सवाल स्पष्ट रूप से एक बाहरी प्रोग्राम का उपयोग किए बिना अधिक कमांडलाइन प्रकार के उत्तर के लिए पूछ रहा है, अगर लोग यहां क्लिक कर रहे थे, तो वे संभवतः डेस्कटॉप तरीकों के लिए एक गिटब की तलाश नहीं करेंगे।
डेमेडोर 11

12
@ डैमेडर, मैं असहमत हूं। 2010 में जब ओपी ने सवाल पूछा, तो ऐसा करने का यूआई तरीका मौजूद नहीं था और एकमात्र विकल्प कमांड लाइन था। यह इंगित करने के लिए कि आप एक कमांड लाइन चाहते हैं केवल विकल्प यह प्रश्न में या टैग, कमांड-लाइन-इंटरफ़ेस के साथ कहा जाना चाहिए , जो इस मामले में मौजूद नहीं है।
एरिक

3
दूरस्थ शाखा को हटाने के लिए git कमांड बेकार है और मैं इसे (नए और पुराने दोनों) भूल जाता हूं। सौभाग्य से वहाँ जीयूआई उपकरण है कि विकल्प है। Git Gui, TortoiseGit और GitHub Desktop में है - काश Git के एक्सटेंशन्स में भी यह कार्यक्षमता होती। वैसे भी, मुझे जो याद है, वह है Git Gui को Git एक्सटेंशन के भीतर से शुरू करने के लिए जब मुझे एक दूरस्थ शाखा को हटाने की आवश्यकता होती है।
वेजेनकोव

78

स्थानीय रूप से हटाने के लिए - (सामान्य)

git branch -d my_branch

यदि आपकी शाखा रिबासिंग / मर्जिंग प्रगति में है और यह ठीक से नहीं किया गया है, तो इसका मतलब है कि आपको एक त्रुटि मिलेगी Rebase/Merge in progress, इसलिए उस स्थिति में, आप अपनी शाखा को हटा नहीं पाएंगे।

इसलिए या तो आपको रिबासिंग / विलय को हल करने की आवश्यकता है। अन्यथा, आप उपयोग करके बल हटा सकते हैं ,

git branch -D my_branch

दूरस्थ में हटाने के लिए :

git push --delete origin my_branch

आप उसी का उपयोग कर सकते हैं:

git push origin :my_branch   # Easy to remember both will do the same.

सचित्र प्रदर्शन:

यहां छवि विवरण दर्ज करें


75

यह बहुत सरल है:

दूरस्थ शाखा को हटाने के लिए

git push -d origin <branch-name>

या

git push origin :<branch-name>

स्थानीय शाखा को हटाने के लिए

git branch -D <branch-name>

2
मुझे दूरस्थ शाखा को हटाने के --deleteबजाय उपयोग करने की आवश्यकता थी -d
ज़कज

-dविकल्प के लिए एक उपनाम है --deleteऔर यदि --deleteकाम है तो काम -dभी करना चाहिए, यदि आप किसी शाखा को जबरदस्ती हटाना चाहते हैं जिसका उपयोग आप या के -Dबजाय कर सकते हैं । -d--delete
विवेक मारू

68

यदि आपके पास रिमोट की शाखा के समान नाम वाला टैग है तो यह काम नहीं करेगा:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'

उस स्थिति में आपको यह निर्दिष्ट करना होगा कि आप शाखा को हटाना चाहते हैं, न कि टैग:

git push origin :refs/heads/branch-or-tag-name

इसी तरह, उस शाखा के बजाय टैग को हटाने के लिए जिसका आप उपयोग करेंगे:

git push origin :refs/tags/branch-or-tag-name

1
यह ठीक है, लेकिन लोगों को वास्तव में एक ही नाम और एक ही नामकरण योजना के साथ अपनी शाखाओं और टैगों का नामकरण नहीं करना चाहिए।

3
खैर, मेरा परिदृश्य यह था कि मैं एक शाखा को टैग में परिवर्तित कर रहा था और यह टैग के लिए शाखा के समान नाम रखने के लिए समझ में आता था। कंवर्ट करने से मेरा मतलब है कि शाखा B को A में विलय करना और B को टैग B के साथ अंतिम बार टैग करना ताकि शाखा B को हटाने के बाद भी इसे आसानी से टैग बी से चेक करके आसानी से बहाल किया जा सके
ग्रेग

53

अन्य उत्तरों में से कई त्रुटियों / चेतावनियों को जन्म देंगे। यह दृष्टिकोण अपेक्षाकृत मूर्खतापूर्ण सबूत है, हालांकि आपको अभी भी इसकी आवश्यकता हो सकती है git branch -D branch_to_deleteयदि यह पूरी तरह से मर्ज नहीं किया जाता है some_other_branch, उदाहरण के लिए।

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

यदि आपने रिमोट ब्रांच को डिलीट किया है तो रिमोट प्रूनिंग की जरूरत नहीं है। इसका उपयोग केवल आपके द्वारा ट्रैक किए जा रहे भंडार पर उपलब्ध नवीनतम अद्यतनों को प्राप्त करने के लिए किया जाता है। मैंने देखा है git fetchकि वे रिमूव जोड़ देंगे, उन्हें हटाएंगे नहीं। यहाँ एक उदाहरण है कि git remote prune originवास्तव में कुछ कब होगा:

उपयोगकर्ता A ऊपर दिए गए चरणों को करता है। उपयोगकर्ता B सबसे पुरानी दूरस्थ शाखाओं को देखने के लिए निम्नलिखित कमांड चलाएगा:

git fetch
git remote prune origin
git branch -r

51

मैं इस उत्तर के लिए गुगली करने से बीमार हो गया, इसलिए मैंने उस उत्तर के लिए एक समान तरीका अपनाया, जो पहले crizCraig ने पोस्ट किया था।

मैंने अपनी बैश प्रोफ़ाइल में निम्नलिखित जोड़े:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

फिर हर बार जब मैं एक शाखा के साथ किया जाता है ( masterउदाहरण के लिए विलय ), मैं अपने टर्मिनल में निम्नलिखित चलाता हूं:

gitdelete my-branch-name

... जो तब और साथ ही स्थानीय स्तर पर हटा my-branch-nameदिया originजाता है।


7
इस पर विस्तार करना, --delete "$@"और -D "$@"इसके बजाय $1इसे कई शाखाओं के लिए संभालना होगा।
कुणाल

3
मेरा सुझाव git branch -dहै कि बदलाव को सुनिश्चित करने के लिए सबसे पहले (लोअरकेस 'डी') को मर्ज किया गया है, और फिर सफल होने पर पुश करें ( &&कमांड के बीच में रखें)
bryn

49

निष्पादित करने से पहले

git branch --delete <branch>

सुनिश्चित करें कि आप पहले यह निर्धारित करते हैं कि रिमोट ब्रांच का सही नाम निष्पादन क्या है:

git ls-remote

यह आपको बताएगा कि मूल्य के लिए वास्तव में क्या दर्ज करना है<branch> । ( branchमामला संवेदनशील है!)


46

उपयोग:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

यदि आप सुनिश्चित हैं कि आप इसे हटाना चाहते हैं, तो चलाएं

git branch -D bugfix

अब हटाए गए दूरस्थ शाखाओं को साफ करने के लिए

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