गिट ब्रांच डिलीट


79

Git में, शाखा के "विलोपन" का क्या अर्थ है?

क्या यह भंडार से चला जाएगा? या इसके माध्यम से अभी भी नेविगेट करने योग्य होगा git branch?

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

जवाबों:


157

आप शाखा को हटा सकते हैं, लेकिन इसे पहले टैग करें, ताकि यह इतिहास गायब न हो। इस तरह, शाखा शाखा सूची में दिखाई नहीं देती है, जिसे उम्मीद है कि लोगों को इस पर काम करने से रोकना चाहिए, लेकिन काम स्थायी रूप से मिटाया नहीं जाएगा (कचरा संग्रह चलने के बाद भी)। उदाहरण के लिए, जब भी मेरे पास एक शाखा होती है जो अप्रासंगिक हो गई है, लेकिन मैं इसे स्थायी रूप से हटाने के लिए तैयार नहीं हूं, मैं इसे "संग्रह / < शाखा-नाम >" के रूप में टैग करता हूं ।

जबकि masterया किसी अन्य शाखा पर:

git tag archive/foo foo
git branch -D foo

यह डिलीट करने से पहले ब्रांच archive/fooसे एक टैग बनाता है । आप टैग में एक संदेश भी जोड़ सकते हैं, जो बताता है कि शाखा में क्या है, यह क्यों अस्तित्व में है, यह अब एक मृत अंत क्यों है, आदि।foofoo

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo

रिकॉर्ड करने की क्षमता क्यों एक शाखा को पदावनत किया जा रहा है, शायद वैकल्पिक नाम स्थान के लिए शाखाओं को बनाम स्थानांतरित करने का टैग लगाने का एक फायदा है।

यदि आपको कभी ऐसी शाखा को पुनर्जीवित करने की आवश्यकता होती है जिसे इस तरह से संग्रहीत किया गया है, तो यह उतना ही सरल है:

git branch foo archive/foo
git tag -d archive/foo       # Optional

अब शाखा वापस आ गई है क्योंकि इसे कभी हटाया नहीं गया था।


5
@sardaukar: यह आर्काइव टैग ( --tagsविकल्प का उपयोग करके git push) और फिर दूरस्थ शाखा को हटाने ( :<branch-to-delete>पुश करते समय रिफस्पेक का उपयोग करके) को धक्का देकर रिमोट रिपोज के साथ भी काम कर सकता है । उदाहरण के लिए:git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
डैन मोल्डिंग

यह अच्छा होगा यदि git के पास लोगों को स्वचालित रूप से सूचित करने का एक तरीका है "यह शाखा संग्रहीत की गई है" और लोगों को एक संग्रहीत शाखा से खींचने की कोशिश करने पर प्रतिबद्ध संदेश दिखाते हैं, लेकिन यह नहीं करता है।
रॉबिन ग्रीन

1
बहुत अच्छा जवाब, वास्तव में मैं क्या देख रहा था! बस निश्चित रूप से, क्या यह उपयोगी है यदि शाखा को हटाए जाने से पहले मास्टर में वापस विलय कर दिया गया है?
पंजा

एक अन्य संबंधित प्रश्न (यदि कोई अभी भी इस धागे का अनुसरण करता है) तो मुझे कैसे "पास" (एक टैग में मास्टर या संग्रह में मर्ज करना चाहिए या जो भी हो) यदि इस शाखा में कई डेवलपर शामिल थे? शाखा को हटाना और टैग करना (स्थानीय और दूरस्थ दोनों) इस शाखा के अन्य विकासकर्ताओं से बहुत असभ्य नहीं है?
क्लैफ

1
यह जवाब शानदार है, शानदार समाधान
क्रिस्टोफर थॉमस

2

गिट शाखाओं को एक संशोधन के संदर्भ के रूप में संग्रहीत किया जाता है। यदि आप शाखा को हटाते हैं, तो संदर्भ हटा दिया जाता है; यदि कुछ और नहीं है जो संशोधन करता है, तो यह अंततः कचरा एकत्र किया जाएगा। इसके अलावा, यदि आप शाखा को हटाते हैं तो यह ठीक से चला गया है (आपके भंडार से)। यदि आप किसी शाखा को पदावनत करना चाहते हैं, लेकिन बाद में उपयोग के लिए उसे इधर-उधर रखना चाहते हैं, तो आप शाखा को एक उपनिर्देशिका में स्थानांतरित कर सकते हैं:

$ git branch
* master
  testing_feature_one
  testing_feature_two
$ git branch -m testing_feature_one deprecated/testing_feature_one
$ git branch
  deprecated/testing_feature_one
* master
  testing_feature_two

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


2

git branch -D <branchName>रिपॉजिटरी से आपकी शाखा को हटा देगा। आप इसे न देख पाएंगे और न ही नेविगेट कर पाएंगे। इसके अलावा, आप उस शाखा में किए गए सभी फ़ाइल परिवर्तनों को खो देंगे।

https://git-scm.com/docs/git-branch


0

यह गिट शाखा के माध्यम से नेविगेट करने योग्य नहीं होगा और जब तक कचरा संग्रह नहीं किया जाता है, तब तक यह भंडार से नहीं खो जाएगा।

यदि आप विचाराधीन शाखा को एक मृत अंत के रूप में चिह्नित करना चाहते हैं तो बस इतना करें (git आपके लिए ऐसा नहीं कर सकता है लेकिन आप निश्चित रूप से कर सकते हैं)

इसे ऐतिहासिक संदर्भ के काम के रूप में लेबल करना (किसी भी तरह से आप पसंद करते हैं)।

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