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




git-branch git-remote (25)

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


Answers

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

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

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

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 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

मुझे इस जवाब के लिए गुगल करने में बीमार हो गया, इसलिए मैंने पहले जवाब देने वाले उत्तर के लिए एक समान दृष्टिकोण लिया।

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

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

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

gitdelete my-branch-name

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


git push origin --delete branchName

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

git push origin :branchName

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

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

git branch -d branch_name 

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

git branch -D branch_name

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

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

git push origin :branchname  

git push origin --delete branchname 

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


मैं अपनी 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 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 remote prune origin का उपयोग करके भी ऐसा कर सकते हैं:

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

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


शाखाएं हटाना

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

$ git branch -d contact-form

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

git push origin --delete contact-form

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

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

git branch -D bugfix

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

git remote prune origin

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

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


यह आसान है: बस निम्न आदेश चलाएं:

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

git branch -d example

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

और उसके बाद कमांड का उपयोग कर रिमोट शाखा हटा दें:

git push origin :example

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

git push --delete origin serverfix

जो वही काम करता है

git push origin :serverfix

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


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

grb delete branch

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


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

बस कहो:

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

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

  • मास्टर शाखा के लिए 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> हटाएं


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

$ 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

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


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

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 <branchname>    # deletes local branch

या

git push origin :<branchname> # deletes remote branch

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

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

git remote prune <repository>

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


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

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.

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


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

git push origin :<branchname>

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

git branch -D <branchname>

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

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

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

यह रिमोट नामित मूल ( documentation ) के लिए DWIM होगा:

$ git checkout -t remote_name/remote_branch

एक नया रिमोट जोड़ने के लिए, आपको पहले निम्नलिखित करना होगा:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

सबसे पहले गिट रिमोट मौजूद है, दूसरा दूसरा काम करता है।





git git-branch git-remote