गिट फीचर शाखा को हटाने का सही समय कब है?


88

मैं 82 फ़ीसदी शाखाओं के साथ समाप्त होना नहीं चाहता , इसलिए मैं सोच रहा था कि जैसे ही मैं मास्टर में विलय करूँगा, वैसे ही सुविधा शाखा को हटाने में क्या संभावित कमियाँ हैं।

कार्यप्रवाह:

git co -b feat-xyz
hack hack
git ci
hack some more
git ci
git co master
git merge feat-xyz
smoke test
git br -d feat-xyz

यहाँ कोई समस्या?


1
मैं कहूंगा कि कोई समस्या नहीं है क्योंकि अगर आपको वास्तव में उनकी आवश्यकता है तो आप बाद में हटाए गए शाखा को फिर से जीवित कर सकते हैं।
23

@slebetman जहाँ तक मुझे पता है एक हटाई गई शाखा को फिर से जीवित नहीं किया जा सकता है। हालांकि यदि शाखा को हटाने से पहले पूरी तरह से मास्टर में विलय कर दिया गया था, तो अब शाखा की कोई आवश्यकता नहीं होनी चाहिए।
शिमोन

1
@ शिमोन हां आप कर सकते हैं। जब आप अपनी शाखा को हटाते हैं, तो जीआईटी कभी भी हटाता नहीं है। एक हटाए गए शाखा को फिर से जीवित करने के लिए आपको बस उस शाखा के लिए प्रतिबद्ध आखिरी चीज को याद रखना होगा और आप उसे खोज सकते हैं git reflog। फिर
स्लीवेटमैन

@slebetman केवल तभी सच होगा जब शाखा को अंततः विलय कर दिया गया था। यदि कमिट्स पीछे रह जाते हैं, तो वे अंततः अप्राप्य हो जाएंगे और निश्चित समय के बाद कचरा संग्रहण के अधीन हो जाएंगे। यहां तक ​​कि रिफ्लॉग में प्रविष्टियां भी अंतिम रूप से शुद्ध की जाएंगी, आपके पास डिफ़ॉल्ट रूप से लगभग 90 दिन हैं।
सुनहरा अनुपात

@goldenratio: उसके लिए कोई संदर्भ?
8

जवाबों:


61

मर्ज के बाद हटाना सामान्य तरीका है। इसलिएgit branch -d yourbranchname सुनिश्चित करने के लिए कि शाखा पूरी तरह से विलीन हो जाती है, इससे पहले कि वह हटाए जाने की जांच करता है।

कुछ कारण हैं जो मैं एक शाखा को रखने के बारे में सोच सकता हूं: आप उत्पादन शुरू होने पर वापस आने पर बग्स को पकड़ सकते हैं, या आप एक ऐतिहासिक रिकॉर्ड चाहते हैं।

किसी भी स्थिति में, आपके पास शाखा के प्रमुख को हटाने से पहले उसे टैग करने का विकल्प होता है। एक टैग एक शाखा की तरह है जिसमें यह कुछ छोटे अंतरों को छोड़कर, एक प्रतिबद्ध के लिए एक संकेतक है: 1) चीनी मिट्टी के बरतन आमतौर पर खोज आदेशों में टैग प्रदर्शित नहीं करते हैं जैसे कि चेक-आउट में टैब शो-पूर्ण या टैब-ऑटो पूर्ण) एक की जाँच करने से आपको एक अलग (गैर-रेफरी) HEAD 3 में रखा जाता है। आप एक " टैगिंग संदेश " छोड़ सकते हैं , जिसके कारण टैग को ऑब्जेक्ट स्टोर में एक वस्तु की तरह सहेजा जा सकता है।

इस तरह आप इतिहास को संरक्षित करते हैं, और यदि आपको कभी भी बग को ठीक करने की आवश्यकता होती है, तो मैं तय करता हूं कि फिक्स के लिए मास्टर की एक नई शाखा तैयार की जाए।


1
एक टैग की जाँच करना HEAD सेट करता है, लेकिन स्वचालित रूप से एक शाखा नहीं बनाता है। एक शाखा के बिना एक प्रतिबद्ध पर एक हेडड क्या वह अलग है।
बिनरियन

1
आप सही हैं, यह HEAD को रेफ की बजाय कमिट आईडी में सेट करता है। मेरे ओपी का वह हिस्सा गलत है। मुझे इसे अपडेट करना चाहिए।
मासकुन

96

मैं विलय के बाद हटाता हूं, लेकिन मैं हमेशा एक करता हूं git merge --no-ff, तेजी से अग्रेषण से बचने के लिए ताकि ग्राफ पर शाखा इतिहास दिखाई दे। मुझे इस बात का इतिहास पसंद है कि विकास शाखा कहाँ से विदा हुई और कहाँ वापस गयी?

फास्ट-फॉरवर्ड के साथ या बिना विलय

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


यह इतिहास को संरक्षित करने का एक और अच्छा तरीका है, क्योंकि आप उन कमिट्स का चयन कर सकते हैं जो फीचर से उपलब्ध हैं, लेकिन मास्टर से नहीं: Rev ^ 1..rev ^ 2। नीचे की ओर यह है कि यह किसी भी रिबासिंग पर शिकंजा करता है जिसे आप अपनी मास्टर शाखा से करना चाहते हैं (उदाहरण के लिए, यदि आप मास्टर को अपस्ट्रीम रिमोट पर छूट देना चाहते हैं, जो बहुत आम है)।
मस्कॉन्ग

1
मुझे वह समस्या नहीं थी। हमारी टीम जीथब के माध्यम से सिंक करती है, और मुझे आमतौर पर रिबास करने की आवश्यकता नहीं होती है, लेकिन मुझे नहीं लगता कि यह यहां एक नकारात्मक पहलू है। यहां तक ​​कि अगर आप अपनी विकसित और सुविधा शाखा को रिबेट करते हैं, तो ब्रांचिंग ग्राफ़ पर दिखाई देता है, और विकास के सापेक्ष फीचर शाखा में क्या मायने रखता है, न कि वह जगह जहां आपने मूल रूप से उस शाखा को बनाते समय प्रस्थान किया था।
21

@Ikraider, अनुस्मारक के लिए धन्यवाद। मैंने उस लेख को देखा जब मैं पहली बार गिट सीख रहा था, यह अब मेरे लिए अधिक समझ में आता है। मैं अपनी फीचर शाखाओं को रिबेट करता हूं, लेकिन मैं merge --no-ffमास्टर पर वापस जाता हूं क्योंकि जैसे आप कहते हैं कि आप इतिहास देख सकते हैं।
bstpierre

7

मैं दो कारणों से सोच सकता हूं कि आप एक बिट के लिए चारों ओर एक सुविधा शाखा क्यों रखना चाहते हैं:

  • एक मौका है कि यह अपस्ट्रीम द्वारा अधिक काम के लिए आपको वापस किक करेगा।
  • अन्य डेवलपर्स संभवतः मास्टर में बाकी सब कुछ न चाहते हुए भी उस सुविधा को चाहते हैं।

व्यवहार में, मर्ज के बाद हटाने का अधिकांश समय ठीक है।


6

विशिष्ट वर्कफ़्लो होगा

 // Create new branch
 $ git checkout -b myfeature
 // and then do some changes and commit them

 // Switch to master branch
 $ git checkout master

 // Merge myfeature to master. --no-ff will always keep branch information.
 $ git merge --no-ff myfeature

 // Delete myfeature branch
 $ git branch -d myfeature

 // Push the changes
 $ git push origin master

1

मुझे लगता है कि विशिष्ट वर्कफ़्लो है (मर्ज के बाद हटाना)

EDIT तो, मर्ज के बजाय, कम से कम जीवित शाखाओं के लिए, मुझे लगता है कि यह विचार उन्हें मास्टर को फिर से बनाने के लिए है। फिर आप एक रेखीय परिवर्तन इतिहास के साथ समाप्त होते हैं, और पूरी शाखा मुख्य ट्रंक का हिस्सा बन जाती है। इस मामले में आपके पास वहां सभी परिवर्तन हैं, इसलिए आपको स्पष्ट रूप से प्रतिलिपि की आवश्यकता नहीं है।


तो वास्तव में शाखा को चारों ओर रखने का कोई मतलब नहीं है, है ना?
23

1
मैं दृढ़ता से "रिबेस" से बचने की सलाह देता हूं। रिबासिंग आमतौर पर हानिकारक है, केवल कुछ मामलों में उपयोगी है।
डिट्रीच एप्प

9
रीबेसिंग आपके स्थानीय, निजी शाखाओं के लिए एक पूरी तरह से उचित वर्कफ़्लो है। उदाहरण के लिए रिबासिंग ("रिबासिंग डाउन ") द्वारा अपस्ट्रीम कार्य के साथ तालमेल रखना बहुत आम है । यह बहुत कम आम है, और आमतौर पर हानिकारक है, * रीबेस करने के लिए। दूसरे के जवाब का वास्तव में कोई मतलब नहीं है, क्योंकि चाहे आप ऊपर के बदलावों में रिबासिंग या मर्ज कर रहे हों, फिर भी आपको उस सामान को किसी तरह "ऊपर" धकेलना होगा। यहां तक ​​कि आपकी स्थानीय शाखा पर, आपको किसी बिंदु पर मास्टर करने के लिए अपनी सुविधा में विलय करना होगा। आपकी सुविधाओं पर छूट दिए जाने का लाभ यह है कि यह मर्ज तेजी से आगे बढ़ता है।
मासक

1
वहाँ है, हालांकि, जो मुझे हाल ही में बिट, के लिए बाहर पलटाव शाखाओं के साथ देखने के लिए कुछ है। यह अब स्पष्ट है, लेकिन मैं एक लंबे समय तक रहने वाली शाखा पर महीनों तक रहा, हमेशा मास्टर के खिलाफ पूरी बात का खंडन करता रहा। यह लगभग 600 अच्छा, दानेदार काम करता है, लेकिन मास्टर को कई बार बदला गया और पूरी तरह से बदल दिया गया। हर बार पूरी ब्रांच को रिजेक्ट करके, मैं उनके पुराने कमिट्स को उनके कनेक्शन से लेकर मास्टर कमिट्स में काट रहा था, जिससे उन्हें समझ आ रहा था। अब मैं जरूरत पड़ने पर मास्टर में विलय करना पसंद करता हूं। यदि शाखा का इतिहास पूरी तरह से प्रभावित नहीं होगा, तो मैं केवल रिबास करूंगा।
गैरी फिक्सर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.