2013-02-27 19 views
7

का उपयोग करके परिवर्तनों को कैसे प्रतिबद्ध और धक्का देना है, मैं सिर्फ यह स्पष्ट करना चाहता हूं कि विशिष्ट शाखाओं पर काम करने का तरीका कैसे काम करता है।गिट

मान लें कि मैं "मेट्रो" नामक शाखा पर काम कर रहा हूं। मैं कुछ फ़ाइलों में कुछ बदलाव करता हूं, लेकिन मैं इसे रिमोट रिपोजिटरी तक धक्का देने के लिए तैयार नहीं हूं।

एक हॉटफिक्स आता है जिसमें मुझे एएसएपी को ठीक करने की आवश्यकता है। मुझे "मास्टर" नामक एक स्वच्छ शाखा में स्विच करने की आवश्यकता है, लेकिन मैं नहीं कर सकता क्योंकि मैं उन फ़ाइलों को ओवरराइट कर दूंगा जो मैंने बदल दी हैं। स्विच करने से पहले मुझे इन्हें प्रतिबद्ध करने की ज़रूरत है।

मेरा सवाल यह है कि, यदि मैं "मेट्रो" शाखा पर इन परिवर्तनों को करता हूं, तो "मेट्रो" शाखा पर स्विच करें, क्या "मेट्रो" में किए गए परिवर्तन दूरस्थ "मास्टर" रेपो पर धकेल जाएंगे क्योंकि मेरे पास है उन्हें प्रतिबद्ध किया, भले ही मैं दूसरी शाखा में जा रहा हूं?

इसे संक्षिप्त बनाने के लिए, शाखाओं को अलग कर दिया जाता है, या रिमोट रेपो को दबाते समय सभी को जोड़ा जाता है?

उत्तर

3

git checkout master के माध्यम से मास्टर में शाखाओं को स्विच करने से पहले, आपको पहले git commit -m 'some message' होना चाहिए, अन्यथा, गिट मास्टर शाखा में आपके साथ आपकी वर्तमान शाखा के परिवर्तनों को लेने का प्रयास करेगा।

"मेट्रो" में किए गए परिवर्तनों दूरस्थ "मास्टर" के लिए रेपो धक्का दे दिया हो जाएगी क्योंकि मैं उन्हें प्रतिबद्ध है, भले ही मैं अन्य शाखा करने के लिए जोर दे रहा हूँ?

बिलकुल नहीं। गिट केवल Metro से मास्टर के लिए प्रतिबद्ध परिवर्तनों को मर्ज करेगा यदि आप इसे करने के लिए कहते हैं। यह डिज़ाइन द्वारा है (नोट: कृपया रिटोट्स का उपयोग करके गिट रिमोट्स के बारे में पढ़ें, आप वास्तव में इसे "डिफ़ॉल्ट" द्वारा करने के लिए अपने धक्का सेट कर सकते हैं, जो एक ऐसा मामला होगा जहां आपको सावधान रहना होगा।)।

1

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

तो, शाखाएं एक दूसरे से पूरी तरह से स्वतंत्र हैं, और इसी तरह, उनका वास्तव में बहुत अधिक मतलब नहीं है। वे सिर्फ पॉइंटर्स हैं।

अपने मामले में, जब आप metro से master पर स्विच करते हैं, तो आप पेड़ के एक अलग पक्ष पर काम कर रहे हैं (शायद)। अब जो भी काम करता है, वह केवल मौजूदा शाखा सूचक-मास्टर को स्थानांतरित करेगा-लेकिन किसी भी अन्य शाखाओं को प्रभावित नहीं करेगा।

और यदि आप एक शाखा को दबाते हैं, तो ऐसा होता है कि आप रिमोट को शाखा बिंदुओं को प्रतिबद्ध करते हैं, और फिर आप पेड़ को पूरा करने के लिए सभी वस्तुओं को रिमोट देते हैं।

2

जब दूरस्थ रेपो के लिए जोर दे रहा बनाने के लिए यह संक्षिप्त, शाखाओं के लिए अलग करता है, या कर सभी करता जोड़ दिए जाते हैं?

इसे संक्षिप्त बनाने के लिए: हाँ पहले भाग में :-)।

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

नोट तथापि है कि आप ध्यान केवल लेने के शाखा है कि आप पुश करने के लिए चाहते हैं पुश करने के लिए करना होगा - git pushसभी अपने शाखाओं पुश करने के लिए विन्यस्त किया जा सकता।

git config push.default current 

यह सुनिश्चित करें कि git push केवल वर्तमान शाखा (और नहीं सभी शाखाओं, जो डिफ़ॉल्ट हुआ करता था) धक्का होगा बनाता है: इससे बचने के लिए, config वर push.default निर्धारित किया है।