git checkout
--ours
आपके पास स्थानीय रूप से फ़ाइल का संस्करण देखने का विकल्प है (जैसा कि विरोध किया गया है --theirs
, जो कि आपके द्वारा खींचा गया संस्करण है)। आप इसे पेड़ की हर चीज की जांच .
करने के git checkout
लिए बता सकते हैं । फिर आपको हल के रूप में संघर्षों को चिह्नित करने की आवश्यकता है, जिसे आप git add
एक बार कर सकते हैं और अपना काम कर सकते हैं :
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
कमांड .
में ध्यान दें git checkout
। यह बहुत महत्वपूर्ण है, और याद करने में आसान है। git checkout
दो मोड हैं; एक जिसमें यह शाखाओं को स्विच करता है, और एक जिसमें यह कार्यशील प्रतिलिपि में सूचकांक से बाहर की फ़ाइलों की जांच करता है (कभी-कभी उन्हें दूसरे संशोधन से पहले सूचकांक में खींचता है)। जिस तरह से यह अलग है कि क्या आपने एक फ़ाइल नाम दिया है; यदि आप फ़ाइल नाम में पास नहीं हुए हैं, तो यह शाखाओं को बदलने की कोशिश करता है (हालाँकि यदि आप किसी शाखा में पास नहीं होते हैं, तो यह केवल वर्तमान शाखा को फिर से जाँचने की कोशिश करेगा), लेकिन यह संशोधित फ़ाइलों के होने पर ऐसा करने से इनकार करता है। वह असर करेगा। इसलिए, यदि आप ऐसा व्यवहार चाहते हैं जो मौजूदा फ़ाइलों को अधिलेखित कर देगा, तो आपको .
दूसरा व्यवहार प्राप्त करने के लिए पास या फ़ाइलनाम में पास होना होगा git checkout
।
यह भी एक अच्छी आदत है, जब एक फाइलनाम में गुजर रहा है, के साथ इसे ऑफसेट करने के लिए --
, जैसे कि git checkout --ours -- <filename>
। यदि आप ऐसा नहीं करते हैं, और फ़ाइल नाम किसी शाखा या टैग के नाम से मेल खाने के लिए होता है, तो गिट यह सोचेगा कि आप उस फ़ाइल नाम की जाँच करने के बजाय उस संशोधन की जाँच करना चाहते हैं, और इसलिए checkout
कमांड के पहले रूप का उपयोग करें ।
मैं थोड़ा विस्तार करूँगा कि कैसे Git में संघर्ष और विलय का काम होता है। जब आप किसी और के कोड में विलय करते हैं (जो कि एक पुल के दौरान भी होता है; एक पुल अनिवार्य रूप से एक मर्ज द्वारा पीछा किया जाता है), कुछ संभावित परिस्थितियां हैं।
सबसे सरल यह है कि आप उसी संशोधन पर हैं। इस मामले में, आप "पहले से ही अद्यतित हैं", और कुछ भी नहीं होता है।
एक और संभावना यह है कि उनका संशोधन केवल आपका एक वंशज है, जिस स्थिति में आप डिफ़ॉल्ट रूप से "फास्ट-फॉरवर्ड मर्ज" करेंगे, जिसमें आपका HEAD
सिर्फ उनकी प्रतिबद्धताओं के लिए अपडेट किया गया है, जिसमें कोई विलय नहीं हो रहा है (यदि आप अक्षम हो सकते हैं वास्तव में एक मर्ज रिकॉर्ड करना चाहते हैं, का उपयोग करते हुए --no-ff
)।
फिर आप उन स्थितियों में पहुंच जाते हैं जिनमें आपको वास्तव में दो संशोधनों का विलय करने की आवश्यकता होती है। इस मामले में, दो संभावित परिणाम हैं। एक यह है कि मर्ज सफाई से होता है; सभी परिवर्तन अलग-अलग फ़ाइलों में हैं, या एक ही फ़ाइल में हैं, लेकिन अभी तक पर्याप्त नहीं है कि परिवर्तनों के दोनों सेट समस्याओं के बिना लागू किए जा सकते हैं। डिफ़ॉल्ट रूप से, जब एक स्वच्छ मर्ज होता है, तो यह स्वचालित रूप से प्रतिबद्ध होता है, हालांकि आप इसे अक्षम कर सकते हैं --no-commit
यदि आपको इसे पहले से संपादित करने की आवश्यकता है (उदाहरण के लिए, यदि आप फ़ंक्शन foo
का नाम बदल देते हैं bar
, और कोई और नया कोड जोड़ता है जो कॉल करता है foo
, तो यह सफाई से मर्ज हो जाएगा , लेकिन एक टूटे हुए पेड़ का उत्पादन करें, ताकि आप किसी भी टूटे हुए कमिट से बचने के लिए मर्ज कमिट के हिस्से के रूप में सफाई करना चाहें)।
अंतिम संभावना यह है कि एक वास्तविक मर्ज है, और संघर्ष हैं। इस मामले में, Git के रूप में ज्यादा मर्ज के रूप में यह कर सकते हैं क्या करेंगे, और संघर्ष मार्कर (के साथ फ़ाइलें उपज <<<<<<<
, =======
और >>>>>>>
अपने काम के पिछले भाग में)। सूचकांक में ("स्टेजिंग क्षेत्र" के रूप में भी जाना जाता है; वह स्थान जहाँ फ़ाइलों को git add
कमिट करने से पहले संग्रहीत किया जाता है ), आपके पास संघर्ष के साथ प्रत्येक फ़ाइल के 3 संस्करण होंगे; आपके द्वारा मर्ज की जाने वाली दो शाखाओं के पूर्वज से फ़ाइल का मूल संस्करण है, HEAD
(आपके मर्ज के किनारे) से संस्करण, और दूरस्थ शाखा से संस्करण।
संघर्ष को हल करने के लिए, आप या तो उस फ़ाइल को संपादित कर सकते हैं जो आपकी कार्य प्रतिलिपि में है, संघर्ष मार्करों को हटाकर कोड को ठीक करना ताकि यह काम करे। या, आप मर्ज के एक या दूसरे पक्षों से संस्करण का उपयोग करके git checkout --ours
या देख सकते हैं git checkout --theirs
। एक बार जब आप फ़ाइल को उस स्थिति में डाल देते हैं जिसे आप चाहते हैं, तो आप इंगित करते हैं कि आप फ़ाइल को मर्ज कर रहे हैं और यह उपयोग करने के लिए तैयार है git add
, और फिर आप मर्ज को प्रतिबद्ध कर सकते हैं git commit
।