2012-02-08 3 views
22

को बदलने के लिए परिवर्तन बन गए हैं, इसलिए मैं एक शाखा में काम कर रहा हूं, कुछ बदलाव कर रहा हूं और git merge master चला सकता हूं। मुझे संशोधित फ़ाइलों में से एक पर विलय विवाद मिलता है (जो मुझे पता है कि कैसे निपटना है), लेकिन किसी कारण से, मैंने फ़ाइलों का एक समूह स्पर्श नहीं किया है (लेकिन मास्टर में अपडेट किया गया है) अचानक मेरी सूची दर्ज करें "परिवर्तन करने के लिए परिवर्तन"।गिट मर्ज विवाद के बाद, मैंने जिन फ़ाइलों को स्पर्श नहीं किया, वे

यह क्यों है? और मैं इसे कैसे ठीक करूं? मैं नहीं चाहता कि इनमें से कोई भी मेरे द्वारा किए गए परिवर्तनों में बदलाव न करे।

+0

रीबेस का उपयोग विलय नहीं करें। –

+1

[http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs-merge-questions ](httpoverflow.com/questions/457927/git-workflow-and-rebase-vs -मेज-प्रश्न) - यह आपको –

+7

पर देखना चाहिए, जो विभिन्न वर्कफ़्लो ऑफ़र करें और विलय करें। इस "समस्या" को हल करने के लिए विलय करने के बजाय विद्रोह का उपयोग करके अंधेरे से सही दृष्टिकोण नहीं है। –

उत्तर

0

जब आप विलय का प्रयास करते हैं, तो सभी फ़ाइलों को स्वचालित रूप से विलय किया जा सकता है (उदाहरण के लिए जहां आपकी स्थानीय शाखा में कोई परिवर्तन नहीं है लेकिन जिसे स्रोत शाखा में संशोधित किया गया है), स्वचालित रूप से विलय और चरणबद्ध हो जाते हैं। जिन फ़ाइलों को स्वचालित रूप से विलय नहीं किया जा सका, वे आपके कार्यक्षेत्र में विवाद चिह्नकों के साथ अपडेट किए गए हैं और आपको उन्हें ठीक करना होगा।

गिट हमेशा उन्हें करने से पहले स्टेजिंग क्षेत्र में नए कामों को इकट्ठा करता है। विलय एक ही बात करता है। स्रोत शाखा से सभी परिवर्तनों के साथ एक नई प्रतिबद्धता स्टेजिंग क्षेत्र में बनाई गई है। संघर्ष के मामले में, स्टेजिंग क्षेत्र को अपडेट करने की यह प्रक्रिया बाधित है और आपको नियंत्रण दिया जाता है। यही कारण है कि ऐसा होता है। एक बार प्रतिबद्ध होने के बाद, भंडार में एक "विलय प्रतिबद्धता" बनाई जाएगी जिसमें माता-पिता के रूप में स्रोत और लक्ष्य दोनों शाखाएं होंगी।

"मैं नहीं चाहता कि इनमें से कोई भी मेरे द्वारा किए गए परिवर्तनों में बदलाव न हो।", यदि आप कोई बदलाव नहीं चाहते हैं तो आप एक विलय क्यों करते थे?

+7

"आप बिल्कुल क्यों विलय कर चुके थे?" प्रश्न ओपी के सवाल का जवाब नहीं है। –

+3

जब आप विलय करते हैं (सार्वजनिक शाखा से दूसरों को धक्का देते हैं), जो परिवर्तन आपने स्वयं नहीं बनाया है, वे आपकी शाखा में आते हैं। एक विलय से आप यही उम्मीद करेंगे। यदि आप किसी भी "मेरे द्वारा किए गए परिवर्तन" नहीं चाहते हैं, तो आपको विलय नहीं करना चाहिए। वैसे भी मेरे लिए तार्किक लगता है। –

+2

"... सभी फाइलें जिन्हें स्वचालित रूप से विलय किया जा सकता है ... स्वचालित रूप से विलय और चरणबद्ध होते हैं।" इसका क्या मतलब है? अगर मेरे पास फ़ाइलों में कोई स्थानीय परिवर्तन नहीं है तो इन परिवर्तनों को करने से मुझे भ्रमित करने से कोई प्रभाव नहीं पड़ता है (जो कि गिट का मुख्य उद्देश्य प्रतीत होता है)। –

2

मुझे लगता है कि चीजों को करने के इस जीआईटी तरीके से समस्या यह है कि प्रतिबद्धता के बाद, "पुश" किया जाएगा। "पुश" में सभी प्रतिबद्ध फाइलें शामिल होंगी - जिनमें "पुशर" स्पर्श नहीं किया गया था। यह ट्रैकिंग बहुत जटिल बदल गया है।

3

ऐसा इसलिए कारण है क्योंकि आप जो भी करने का इरादा रखते थे उसके विपरीत आप सबसे अधिक संभावना रखते थे।

मान लें कि आपकी कार्यशील शाखा को topic-branch कहा जाता है।

कर के बजाय:

$ git merge master

आप कर सकता है:

$ git checkout master 
$ git merge topic-branch 

अंग्रेजी में, बजाय topic-branch आप master में topic-branch विलय कर दिया जा सकता था में master शाखा विलय की।

को समझने के लिए क्यों यह वांछित परिणाम हम बयान पिछले एक जवाब में की गई जांच कर सकते हैं को प्राप्त होता है:

जब आप किसी मर्ज का प्रयास, सभी फ़ाइलें हो सकता है स्वचालित रूप से मर्ज (जैसे तुम कहाँ डॉन ' आपके स्थानीय शाखा में कोई बदलाव नहीं है लेकिन को स्रोत शाखा में संशोधित किया गया है), स्वचालित रूप से विलय और चरणबद्ध होते हैं।

आपके पास जो समस्या है वह merge है जो अपना काम करने की कोशिश कर रहा है। फाइलें आपकी विषय शाखा में नहीं बदली गई हैं, लेकिन वे उस शाखा में हैं जहां आप विलय कर रहे हैं।यदि आप topic-branch को master में विलय करने की विपरीत दिशा में देखते हैं तो समस्या दूर हो जाती है क्योंकि यह केवल उन फ़ाइलों को मानती है जिन्हें आपने संशोधित किया है।

वैचारिक रूप से, यहाँ क्या मर्ज (अधिक here) कर रहा है:

वर्तमान प्रधान वर्तमान कहा जा है, और सिर मर्ज करने बुलाया मर्ज।

  1. वर्तमान और विलय के सामान्य पूर्वजों की पहचान करें। पूर्वजों को प्रतिबद्ध करें।
  2. आसान मामलों के साथ सौदा करें। यदि पूर्वज-प्रतिबद्ध विलय के बराबर है, तो कुछ भी नहीं करें। यदि पूर्वज-प्रतिबद्ध वर्तमान के बराबर है, तो fast forward merge करें।
  3. अन्यथा, पूर्वजों के बीच परिवर्तन और विलय के बीच परिवर्तन निर्धारित करें।
  4. उन परिवर्तनों को वर्तमान में फ़ाइलों में विलय करने का प्रयास करें।
  5. यदि कोई विवाद नहीं हुआ, तो दो माता-पिता, वर्तमान और विलय के साथ एक नई प्रतिबद्धता बनाएं। इस नई प्रतिबद्धता को इंगित करने के लिए वर्तमान (और HEAD) सेट करें, और उसके अनुसार परियोजना के लिए कार्य फ़ाइलों को अपडेट करें।
  6. यदि कोई संघर्ष हुआ तो उचित संघर्ष मार्कर डालें और उपयोगकर्ता को सूचित करें। कोई प्रतिबद्ध बनाया गया है।
+4

यह उत्तर ऑफ़-विषय लगता है, क्योंकि किसी को कई विषय-शाखाओं को मर्ज करने की आवश्यकता है, लेकिन हाल ही में मास्टर के लिए किए गए परिवर्तनों के साथ। इसलिए किसी को आगे बढ़ने से पहले मास्टर को अपनी खुद की विषय शाखा में विलय करना होगा। – Alec

संबंधित मुद्दे