ज्यादातर मामलों में, गिट शाखाओं के बीच मतभेदों को हल कर सकता है और उन्हें मर्ज कर सकता है। ऐसा इसलिए है क्योंकि डेवलपर्स आमतौर पर अलग-अलग लाइनों या फाइलों में बदलाव कर रहे हैं। ऐसे कुछ मामले हैं जहां गिट एक भंडार को मर्ज नहीं कर सकता है। इन स्थितियों को मर्ज संघर्ष कहा जाता है।
इस गाइड में, हम इस बारे में बात करने जा रहे हैं कि विलय क्या है, विलय के विरोध क्या हैं, और आप गिट मर्ज संघर्ष को कैसे हल कर सकते हैं। चलिए शुरू करते हैं!
मर्ज विरोध क्या है?
मर्ज संघर्ष वह है जहां Git आपकी सहायता के बिना दो शाखाओं का विलय नहीं कर सकता है।
मर्ज Git जैसे वर्जन कंट्रोल सिस्टम की आधारशिला विशेषता है। वे डेवलपर्स को एक भंडार में विकास की कई अलग-अलग पंक्तियों को बनाए रखने की अनुमति देते हैं। इसका मतलब है कि एक डेवलपर किसी प्रोजेक्ट की मुख्य कॉपी को बदले बिना एक ब्रांच में बग्स को ठीक करने पर काम कर सकता है।
मर्ज संघर्ष दो परिदृश्यों में उत्पन्न होता है:
- दो शाखाओं ने कोड की एक ही पंक्ति को बदल दिया है।
- एक शाखा ने एक फ़ाइल को हटा दिया है जिसे दूसरी शाखा में बदल दिया गया है।
जब मर्ज विरोध उत्पन्न होता है, तो Git में एक त्रुटि प्रस्तुत की जाएगी। यह आपको बताता है कि Git सफलतापूर्वक शाखाओं को मर्ज करने में असमर्थ था।
हटाए गए फ़ाइल विरोध का समाधान कैसे करें
गिट शाखाएं एक दूसरे से स्वतंत्र हैं। इसका मतलब यह है कि एक डेवलपर एक शाखा से दूसरी शाखा को प्रभावित किए बिना उस फ़ाइल को हटा सकता है।
यदि एक शाखा की फ़ाइल में परिवर्तन किया जाता है, और उस फ़ाइल को दूसरी शाखा से हटा दिया जाता है, तो मर्ज विरोध उत्पन्न हो सकता है। ऐसा इसलिए है क्योंकि गिट को नहीं पता कि फाइल को हटाना है या इसे बदलना है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
मान लीजिए कि हमारी दो शाखाएँ हैं:देव और गुरु। देव शाखा पर, हमने README.md फ़ाइल को हटा दिया है। मास्टर शाखा पर, हमने नया टेक्स्ट जोड़ा है।
हम इन शाखाओं को git मर्ज कमांड का उपयोग करके मर्ज कर सकते हैं:
git merge dev
यह "देव" शाखा को हमारी वर्तमान शाखा में मिला देगा, जो कि मास्टर है। हमारे कोड ने एक मर्ज विरोध लौटाया है:
स्वत:मर्जिंग README.mdCONFLICT (सामग्री):README.md में मर्ज विरोध स्वचालित मर्ज विफल; विरोधों को ठीक करें और फिर परिणाम के लिए प्रतिबद्ध हों।
इस संघर्ष को हल करने के लिए, हमें एक निर्णय लेने की आवश्यकता है:क्या हम फ़ाइल को रखना चाहते हैं, या इसे बदलना चाहते हैं? यदि आप फ़ाइल रखना चाहते हैं, तो git ऐड कमांड का उपयोग करें और इसे वापस रिपॉजिटरी में जोड़ें:
git add README.md
अन्यथा, इसे अपने भंडार से निकालने के लिए git rm कमांड का उपयोग करें:
git rm README.md
rm command
आपके स्थानीय भंडार से फ़ाइल को हटा देगा। आरएम कमांड का उपयोग करने से पहले, यह सुनिश्चित करने के लिए दोबारा जांच करें कि आप फ़ाइल को हटाना चाहते हैं।
एक बार जब आपने चुन लिया कि विवादित फाइलों के साथ क्या करना है, तो आप अपने परिवर्तनों के साथ एक प्रतिबद्धता बना सकते हैं और शाखा को मर्ज कर सकते हैं:
git add README.mdgit प्रतिबद्ध -m "करतब:रिपॉजिटरी में README.md जोड़ें" git मर्ज देव
git add कमांड हमारे परिवर्तनों को चरणबद्ध करता है। git कमिट कमांड एक नई कमिट बनाता है। गिट मर्ज कमांड हमारी देव और मास्टर शाखाओं को मर्ज करता है। हमारी शाखाएं अब विलय कर सकती हैं क्योंकि हमने मर्ज विवाद का समाधान कर लिया है।
फ़ाइल परिवर्तन विरोध का समाधान कैसे करें
डेवलपर्स कभी-कभी दो अलग-अलग शाखाओं पर एक ही फाइल में बदलाव करते हैं। गिट के लिए यह भेद करना असंभव है कि दो शाखाओं को विलय करते समय कौन सा परिवर्तन रखना है।
इस मामले में, एक मर्ज संघर्ष उत्पन्न होगा। मान लीजिए कि हमारे पास दो शाखाओं के साथ एक भंडार है:मास्टर और देव। हमने दोनों शाखाओं पर README.md फाइल में बदलाव किया है। यह एक मर्ज विरोध का कारण बना है:
स्वत:मर्जिंग README.mdCONFLICT (सामग्री):README.md में मर्ज विरोध स्वचालित मर्ज विफल; विरोधों को ठीक करें और फिर परिणाम के लिए प्रतिबद्ध हों।
पहला कदम मर्ज विरोध के मूल कारण की पहचान करना है। आप git status कमांड का उपयोग करके ऐसा कर सकते हैं:
शाखा मास्टर पर आपके पास बिना मर्ज के पथ हैं। (संघर्षों को ठीक करें और "गिट कमिट" चलाएं) (मर्ज को निरस्त करने के लिए "गिट मर्ज --एबॉर्ट" का उपयोग करें) अनमर्ज किए गए पथ:(रिज़ॉल्यूशन को चिह्नित करने के लिए "गिट एड <फ़ाइल>..." का उपयोग करें) दोनों संशोधित:README.mdपूर्व>हम इस संदेश से देख सकते हैं कि फ़ाइल
README.md
दोनों शाखाओं में संशोधित किया गया था। अब, हमें अपने मर्ज विवाद को सुलझाना होगा। आइए एक टेक्स्ट एडिटर का उपयोग करके हमारी README.md फ़ाइल खोलें:
यह एक README.md फ़ाइल है। यह मर्ज-संघर्ष नामक भंडार में है।<<<<<<>>>>>> देवगिट ने हमें यह बताने के लिए फ़ाइल संपादित की है कि एक मर्ज विरोध मौजूद है और संघर्ष मार्कर जोड़े गए हैं। मर्ज विरोध को व्यक्त करने के लिए Git से कम, उससे अधिक और बराबर चिह्न वर्णों का उपयोग करता है।
संकेतों से कम (<) वर्तमान शाखा में किए गए परिवर्तनों का प्रतिनिधित्व करते हैं। संकेतों से बड़ा (>) आपको उस शाखा में किए गए परिवर्तन के बारे में बताता है जिसे आपने अपनी वर्तमान शाखा में विलय करने का प्रयास किया था। बराबर चिह्न (=) अंतर को अलग करते हैं।
इस मामले में:
- “यह फ़ाइल मुख्य शाखा में है।” हमारी मास्टर शाखा (या HEAD) पर है।
- “यह फ़ाइल देव शाखा में है।” हमारी देव शाखा पर है।
इस मर्ज टूल विरोध को हल करने के लिए, आपको केवल उस टेक्स्ट को हटाना होगा जो आप नहीं चाहते हैं। मान लें कि हम चाहते हैं कि हमारा कोड कहे:"यह फ़ाइल एक शाखा पर है।" हम यह संशोधन इस प्रकार कर सकते हैं:
यह एक README.md फ़ाइल है। यह मर्ज-संघर्ष नामक रिपॉजिटरी में है। यह फ़ाइल एक शाखा पर है।
इन परिवर्तनों को करने के बाद, हम अंतिम विलय करने के लिए तैयार हैं। आइए अपने परिवर्तनों को चरणबद्ध करें, उन्हें हमारे भंडार में प्रतिबद्ध करें, और हमारे dev
. को मर्ज करें और master
शाखाएं:
git add .git commit -m "करतब:मर्ज विरोध का समाधान करें।"गिट मर्ज देव
अब जब हमने अपने मर्ज विवाद का समाधान कर लिया है, तो हमारा कोड सफलतापूर्वक मर्ज हो गया है।
निष्कर्ष
जब आप दो शाखाओं में पाठ की एक ही पंक्ति में परिवर्तन करते हैं या जहाँ आप एक शाखा पर एक फ़ाइल बदलते हैं और उस फ़ाइल को दूसरी शाखा से हटाते हैं, तो मर्ज विरोध उत्पन्न होता है।
इस गाइड में, हमने चर्चा की है कि दोनों मामलों में मर्ज के विरोध को कैसे हल किया जाए। अब आप Git विशेषज्ञ की तरह मर्ज के विरोध से निपटने के लिए तैयार हैं।