git - मैं स्थानीय रूप से और दूरस्थ रूप से गिट शाखा कैसे हटा सकता हूं?




git-branch git-remote (20)

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

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

$ 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 दोनों पर remotes/origin/bugfix शाखा को सफलतापूर्वक हटाने के लिए मुझे अलग-अलग करने की क्या ज़रूरत है?

https://code.i-harness.com


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

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

ध्यान दें कि ज्यादातर मामलों में रिमोट नाम origin

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

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

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

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

रिमोट शाखा हटाएं [8-सितंबर-2017 को अपडेट किया गया]

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

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

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

$ git push <remote_name> :<branch_name>

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

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

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

रिमोट शाखा हटाएं [5-जनवरी-2010 से मूल उत्तर]

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

रिमोट शाखाओं को हटाना

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

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

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

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

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

git fetch --all --prune

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


संक्षिप्त उत्तर

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

रिमोट शाखा को हटाना:

git push origin --delete <branch>  # Git version 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 tracking branches
git fetch <remote> -p      # Shorter

लंबा उत्तर: हटाने के लिए 3 अलग-अलग शाखाएं हैं!

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

  1. स्थानीय शाखा X
  2. रिमोट मूल शाखा X
  3. रिमोट शाखा origin/X को ट्रैक करने वाली स्थानीय रिमोट-ट्रैकिंग शाखा origin/X X

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

git branch -rd origin/bugfix

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

उस वास्तविक रिमोट शाखा को हटाने के लिए , आपको चाहिए

git push origin --delete bugfix

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

निम्नलिखित खंड आपके रिमोट और रिमोट-ट्रैकिंग शाखाओं को हटाने पर विचार करने के लिए अतिरिक्त विवरण का वर्णन करते हैं।

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

ध्यान दें कि git push का उपयोग कर कमांड लाइन से रिमोट शाखा X को हटाने से स्थानीय रिमोट-ट्रैकिंग शाखा origin/X भी हटा दिया जाएगा , इसलिए git fetch --prune या git fetch -p साथ अप्रचलित रिमोट-ट्रैकिंग शाखा को git fetch --prune आवश्यक नहीं है git fetch -p , हालांकि अगर आप इसे वैसे भी करते हैं तो इससे कोई 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 । ऐसा तब हो सकता है जब आपने गिटहब के वेब इंटरफेस के माध्यम से सीधे रिमोट शाखा हटा दी हो, उदाहरण के लिए।

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

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

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

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

अप्रचलित दूरस्थ ट्रैकिंग शाखाओं के लिए स्वचालित स्वचालित छंटनी के लिए वैकल्पिक

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

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

यह भी देखें


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

grb delete branch

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


अन्य उत्तरों में से कई त्रुटियों / चेतावनियों का कारण बनेंगे। यह दृष्टिकोण अपेक्षाकृत मूर्ख प्रमाण है हालांकि आपको अभी भी git branch -D branch_to_delete आवश्यकता हो सकती है अगर यह some_other_branch में पूरी तरह से विलय नहीं 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 वास्तव में कुछ करेगा:

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

git fetch
git remote prune origin
git branch -r

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

ऐप लॉन्च करने के बाद

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

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

$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
 * [pruned] origin/some-branchs

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


एक और दृष्टिकोण है

git push --prune origin

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

git push --mirror

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


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

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


निष्पादन से पहले

git branch --delete <branch>

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

git ls-remote

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


बस कहो:

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

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

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

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

git-shoot branchname

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

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

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

सर्वर से रिमोट शाखा को निकालने के लिए:

git push origin --delete {the_remote_branch}

संदर्भ: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

रिमोट शाखा को हटाना:

git push origin --delete branch_to_be_deleted

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

$ 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 '[email protected]:SomeName/some-repo.git'

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

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

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

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

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

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


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

  • मास्टर शाखा के लिए git checkout master - git checkout master

  • अपनी रिमोट शाखा हटाएं - git push origin --delete <branch-name> - हटाएं git push origin --delete <branch-name>

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


एक लाइनर कमांड स्थानीय, और रिमोट दोनों को हटा देता है:

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

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

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

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

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

git branch -d branch_name 

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

git branch -D branch_name

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

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

git push origin :branchname  

git push origin --delete branchname 

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


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

git push origin --delete branchName

से याद रखना आसान है

git push origin :branchName




git-remote