यह अक्सर कहा जाता है कि, आपको उन प्रतिबद्धताओं का खंडन नहीं करना चाहिए जिन्हें आपने पहले ही धक्का दे दिया है। इसका क्या मतलब हो सकता है?
यह अक्सर कहा जाता है कि, आपको उन प्रतिबद्धताओं का खंडन नहीं करना चाहिए जिन्हें आपने पहले ही धक्का दे दिया है। इसका क्या मतलब हो सकता है?
जवाबों:
ProGit किताब एक है अच्छा विवरण ।
आपके प्रश्न का विशिष्ट उत्तर " द पेरिल्स ऑफ रीबासिंग " नामक अनुभाग में पाया जा सकता है । उस सेक्शन का एक उद्धरण:
जब आप सामान को रीबेस करते हैं, तो आप मौजूदा कमिट्स को छोड़ देते हैं और नए बनाते हैं जो समान लेकिन अलग होते हैं। यदि आप कहीं धक्का देते हैं और अन्य लोग उन्हें नीचे खींचते हैं और उन पर आधार का काम करते हैं, और फिर आप उन लोगों को फिर से लिखने के साथ फिर से लिखते हैं और उन्हें फिर से धक्का देते हैं, तो आपके सहयोगियों को अपने काम को फिर से मर्ज करना होगा और जब आप कोशिश करेंगे तो चीजें गड़बड़ हो जाएंगी अपने काम को वापस अपने में खींचो।
अपडेट:
नीचे दी गई आपकी टिप्पणी के आधार पर, ऐसा लगता है कि आपके जीआईटी वर्कफ़्लो के साथ कठिनाई हो रही है। यहां कुछ संदर्भ दिए गए हैं जो मदद कर सकते हैं:
gitworkflows
आदमी पेज: देखें "ऊपर की तरफ विलय" और "विषय शाखाओं"इसे समझने के लिए, हमें थोड़ा समझने की आवश्यकता है कि गिट कैसे काम करता है। गिट रिपॉजिटरी एक पेड़ की संरचना है, जहां पेड़ के नोड्स कमिट होते हैं। यहाँ एक बहुत ही सरल भंडार का उदाहरण दिया गया है:
इसकी चार शाखाएँ मास्टर शाखा पर हैं, और प्रत्येक कमिट में एक आईडी है (इस मामले में, ए, बी, सी और डी)। आप देखेंगे कि d वर्तमान में मास्टर शाखा का नवीनतम कमिट (या HEAD) है।
यहाँ, हमारी दो शाखाएँ हैं: गुरु और मेरी शाखा। आप देख सकते हैं कि मास्टर और मेरी-शाखा दोनों में एक और बी शामिल हैं, लेकिन फिर वे विचलन करना शुरू करते हैं: मास्टर में सी और डी शामिल हैं, जबकि मेरी शाखा में ई और एफ शामिल हैं। बी को मास्टर की तुलना में मेरी-शाखा का "मर्ज बेस" कहा जाता है - या अधिक सामान्यतः, बस "आधार"। यह समझ में आता है: आप देख सकते हैं कि मेरी शाखा मास्टर के पिछले संस्करण पर आधारित थी।
तो चलिए बताते हैं कि मेरी ब्रांच बासी हो गई है, और आप इसे मास्टर के नवीनतम संस्करण के साथ अद्यतित करना चाहते हैं। इसे दूसरे तरीके से रखने के लिए, मेरी शाखा को c और d सम्मिलित करना होगा। आप एक मर्ज कर सकते हैं, लेकिन इससे शाखा में अजीब मर्ज होने लगते हैं जो पुल अनुरोध की समीक्षा करना अधिक कठिन बना देते हैं। इसके बजाय, आप एक रिबेस कर सकते हैं।
जब आप रीबेस करते हैं, तो git आपकी शाखा का आधार ढूंढता है (इस मामले में, b), उस आधार और HEAD (इस मामले में, e और f) के बीच सभी कमिट्स पाता है, और शाखा के HEAD पर उन कमियों को फिर से खेलता है। आप (इस मामले में, मास्टर) पर रिबास कर रहे हैं। Git वास्तव में नए कमिट बनाता है जो यह दर्शाता है कि आपके परिवर्तन मास्टर के ऊपर क्या दिखते हैं: आरेख में, इन कमिटों को ई ′ और f ′ कहा जाता है। Git आपके पिछले कमिट्स को मिटाता नहीं है: ई और एफ को अछूता छोड़ दिया जाता है, और अगर कुछ गलत हो जाता है, तो आप सही तरीके से वापस जा सकते हैं जिस तरह से चीजें होती थीं।
जब कई अलग-अलग लोग अनुकरणीय रूप से एक परियोजना पर काम कर रहे हैं, तो पुल अनुरोध जल्दी से बासी जा सकते हैं। एक "बासी" पुल अनुरोध वह है जो अब विकास की मुख्य रेखा के साथ अद्यतित नहीं है, और इसे परियोजना में विलय करने से पहले इसे अपडेट करने की आवश्यकता है। सबसे आम कारण है कि पुल अनुरोधों का बासी होना संघर्षों के कारण होता है: यदि दो पुल अनुरोधों को एक ही फाइल में समान पंक्तियों को संशोधित करते हैं, और एक पुल अनुरोध को विलय कर दिया जाता है, तो अनमैरिड पुल अनुरोध अब एक संघर्ष होगा। कभी-कभी, एक पुल अनुरोध संघर्ष के बिना बासी जा सकता है: शायद कोडबेस में एक अलग फ़ाइल में बदलावों को नए आर्किटेक्चर के अनुरूप करने के लिए आपके पुल अनुरोध में संबंधित परिवर्तनों की आवश्यकता होती है, या शायद शाखा तब बनाई गई थी जब किसी ने गलती से विलय इकाई परीक्षणों में विलय कर दिया था मास्टर शाखा। कारण चाहे जो भी हो,
रिबासिंग इतिहास को फिर से लिखता है। अगर किसी को उस इतिहास के बारे में पता नहीं है, तो वह पूरी तरह से ठीक है। यदि, हालांकि, उस इतिहास को सार्वजनिक रूप से जाना जाता है, तो गिट में इतिहास को फिर से लिखना ठीक उसी तरह से काम करता है जिस तरह से यह वास्तविक दुनिया में करता है: आपको एक साजिश की आवश्यकता है।
षड्यंत्र वास्तव में एक साथ रखना कठिन है, इसलिए आप पहले से सार्वजनिक शाखाओं को पुन: व्यवस्थित करने से बचते हैं।
ध्यान दें कि सफल साजिशों के उदाहरण हैं : pu
जूनियो सी। हामानो की गिट रिपॉजिटरी (गिट एससीएम की आधिकारिक रिपॉजिटरी) की शाखा अक्सर विद्रोह करती है। जिस तरह से यह काम करता है वह यह है कि उपयोग pu
करने वाले प्रत्येक व्यक्ति को गिट डेवलपर मेलिंग सूची में भी सदस्यता दी जाती है, और यह तथ्य है कि pu
शाखा को विद्रोह किया जाता है और मेलिंगलिस्ट और गिट वेबसाइट पर व्यापक रूप से प्रचारित किया जाता है।
pu
git.it की शाखा एक (सार्वजनिक) वर्कफ़्लो में रिबेस का उपयोग करने का एक अत्यंत सहायक उदाहरण है। इसके साथ परिचित न होने वालों के लिए, सामान्य विचार विषय शाखाओं को फिर से तैयार करना है, जिसमें next
(मास्टर करने के लिए विलय से पहले अस्थिर शाखा) में कोई कमिट नहीं है , फिर सभी विषय शाखाओं pu
को रीसेट next
करके और विलय करके शाखा का पुनर्निर्माण करें । (स्रोत: डॉक्यूमेंटेशन / हाउटो / मेंटेनेंस- git.txt git.kernel.org/?p=git/git.git;a=blob;f=Documentation/howto/… )
एक रिबेस आपके रिपॉजिटरी के इतिहास को बदल देता है। यदि आप दुनिया से बाहर निकलते हैं, यानी उन्हें दूसरों के लिए उपलब्ध कराते हैं, और फिर आप प्रतिबद्ध इतिहास के बारे में अपना दृष्टिकोण बदलते हैं, तो आपके पुराने इतिहास वाले किसी भी व्यक्ति के साथ काम करना मुश्किल हो जाता है।
रिबेस को हानिकारक माना जाता है, यह एक अच्छा अवलोकन है, मुझे लगता है।
git rebase
उस इतिहास को फिर से लिखने के लिए (--interactive?) का उपयोग नहीं करना चाहिए , यह निश्चित रूप से विफल होने का नुस्खा है। यदि मैं विषय में कुछ बदलावों को अस्वीकार कर चुका हूँ, तो शाखा (शाखा X से) और इसे धक्का दे, इसकी पूरी तरह से फिर से एक और डेवलपर विषय शाखा को बदलने के बाद फिर से रिबास करना। अनिवार्य रूप से, मैंmerge
काफी समय से उपयोग कर रहा हूं , लेकिन हम उसी नाव में हैं, जैसे darwinweb.net/articles/86 और इतिहास लगभग अनुपयोगी है।