जीआईटी शाखाएं कैसे काम करती हैं? क्या मैं मास्टर शाखा को हटा सकता हूं?


22

मेरे पास एक परियोजना है जिसमें 2 शाखाएं हैं, विकास और उत्पादन। मैं मास्टर शाखा का उपयोग नहीं कर रहा हूं और हर बार जब मैं लिखता हूं तो git statusयह बताता है कि मेरी शाखा मास्टर से कितनी आगे है।

जब मैं मास्टर शाखा को हटाने की कोशिश करता हूं git branch -d masterतो यह केवल मेरे स्थानीय रिपॉजिटरी पर ही डिलीट होती है न कि रिमोट गिट सर्वर पर। कोई विचार?

जवाबों:


34

Git में, एक शाखा केवल ऑर्डर की गई सूची है (aka: checkins)। कुछ जो नए उपयोगकर्ताओं के लिए थोड़ा भ्रमित हो सकता है, वह यह है कि शाखाओं को एक नाम रखने की आवश्यकता नहीं है (हालाँकि अधिकांश परिस्थितियों में आप एक चाहते हैं); और किसी विशेष शाखा के बारे में कुछ विशेष नहीं है ( masterजब आप एक रिपॉजिटरी को इनिशियलाइज़ करते हैं तो ब्रांच आपके लिए बनाई गई डिफ़ॉल्ट डिफ़ॉल्ट होती है)

आप शायद यह पहले से ही जानते हैं, लेकिन Git लोकप्रिय "सबवर्सन" जैसे कुछ अन्य संस्करण नियंत्रण प्रणालियों की तुलना में अलग है, क्योंकि हर "वर्किंग कॉपी" (तोड़फोड़ भाषा में) यह स्वयं का भंडार है ... वास्तव में, विशेष रूप से कुछ भी नहीं है किसी विशेष प्रतिलिपि के बारे में विशेष; सिवाय इसके कि एक प्रति को आमतौर पर "विहित" के रूप में सहमति दी गई है जिसका उपयोग अंतिम उत्पाद को संग्रहीत करने के लिए किया जाता है।

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

git branch -d master

हालाँकि, यदि आप ऐसा करने में सक्षम नहीं हैं, तो आप इसे अपने स्थानीय मशीन से भी कर सकते हैं। git branchआदेश एक है -rजो दूरदराज के भंडार को प्रभावित करता है विकल्प। दूसरे शब्दों में, निम्नलिखित कमांड को काम करना चाहिए:

git branch -d -r master

ध्यान दें कि उन दोनों मामलों में; मैं मान रहा हूं कि masterपूरी तरह से विकास के इतिहास में विलय हो गया है कि आपकी स्थानीय प्रति वर्तमान में बैठी है। यदि आपने पहले कभी उपयोग नहीं किया है master(यानी: आपने केवल कभी-कभी developmentया में जाँच की है production), तो आपको चिंता करने की कोई बात नहीं है। हालाँकि, यदि आप (या किसी और) में चीजों की जाँच कर रहे हैं master, तो आपको समस्या हो सकती है। आप बदल कर एक हटाने मजबूर कर सकते हैं -dकरने के लिए -Dऊपर बताए गए आदेशों में; लेकिन मैं अत्यधिक जाँच करने की सलाह देता हूँ कि masterपहले से क्या है ! यदि आपके पास दूरस्थ कंप्यूटर तक पहुंच नहीं है, तो आप संभवतः इसे पुनर्प्राप्त नहीं कर पाएंगे!


वैसे; यदि आप (या कोई और) गिट के लिए नया है, तो मैं जॉन विएगली द्वारा नीचे से ऊपर से गिट पढ़ने की सलाह देता हूं । भले ही मैंने इस लेख को खोजने से पहले अपने दम पर Git का थोड़ा बहुत उपयोग किया था, मैं वास्तव में यह नहीं समझ पाया कि जब तक मैंने इसे नहीं पढ़ा तब तक यह कैसे काम किया। यह काफी उपयोगी है!


3
कुछ समय के बाद से मैंने अपनी मूल टिप्पणी लिखी, git का व्यवहार थोड़ा बदल गया। 1.7.12 git के रूप में, git branch -d -r masterअब दूरस्थ शाखा को हटाता नहीं है - यह दूरस्थ शाखा की आपकी स्थानीय प्रतिलिपि के ज्ञान को हटा देता है। अगली बार git fetch, शाखा वापस आ जाएगी! इसके बजाय, आप चलाना चाहेंगे git push origin :master। अनिवार्य रूप से आप यहां क्या कर रहे हैं :, दूरस्थ शाखा (शाखा का नाम दाईं ओर) के ऊपर से एक अशक्त शाखा (बाईं ओर की खाली शाखा नाम :) को प्रभावी ढंग से हटा रहा है।
म्पकर्कर

यह भी ध्यान रखना चाहिए कि जब आप किसी भंडार को क्लोन करते हैं तो आप सामान्य रूप से मास्टर की जाँच करने के लिए डिफ़ॉल्ट होते हैं। यह उस क्लोन पर निर्भर करता है जिसमें आप क्लोन कर रहे हैं। इसलिए मास्टर को हटा दिए जाने के बाद, सुनिश्चित करें कि जिस शाखा को आप डिफ़ॉल्ट चाहते हैं, उसके लिए HEAD अंक बनाएं।
ज़िट्रैक्स

अपने लिंक नीचे से ऊपर Git मर गया है, लेकिन ऐसा लगता है इस पाठ आप की बात कर रहे है (?) आप इस बात की पुष्टि कर सके और हो सकता है इस सवाल का जवाब में लिंक को अपडेट?
या मैपर

या मैपर: यह वह पाठ है जिसका मैं उल्लेख कर रहा हूं: नए लिंक के लिए धन्यवाद! मैंने उत्तर में लिंक अपडेट किया है।
mparker17

4

mastergit के लिए डिफ़ॉल्ट शाखा है। मुझे नहीं पता कि यह आपके लिए इतना भयानक क्यों है जब गिट आपको बताता है कि आप मास्टर से कितनी दूर हैं, लेकिन यदि आप अपने दूरस्थ भंडार पर एक शाखा को हटाना चाहते हैं, तो इसे स्थानीय रूप से हटाना पर्याप्त नहीं है। इसके बजाय यह प्रयास करें:

git push origin :master

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


मुझे मिलता है: रिमोट: त्रुटि: वर्तमान शाखा को हटाने से इंकार करना: जीआईएस / हेड / मास्टर को github.com ! Git! [रिमोट रिजेक्टेड] मास्टर (करंट ब्रांच का
विलोपित

1
@ यह शायद मदद कर सकता है: Matthew-brett.github.io/pydagogue/gh_delete_master.html
MEM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.