2013-11-20 6 views
243

मेरे पास डीएमआर 2 (विकास) नामक एक शाखा है और मैं मास्टर शाखा (लाइव साइट) से खींचना चाहता हूं और अपनी विकास शाखा में सभी बदलावों को शामिल करना चाहता हूं। क्या ऐसा करने के लिए इससे अच्छा तरीका है?मास्टर से विकास शाखा में गिट खींचें

git checkout dmgr2 
git pull origin master 

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

+1

पहले डीएमजीआर 2 शाखा में अपने सभी परिवर्तनों को प्रतिबद्ध करें। और फिर मास्टर को इंगित करें 1. गिट चेकआउट मास्टर और फिर नवीनतम परिवर्तन प्राप्त करें 2. गिट खींचें 3. विजिट मर्ज dmgr2 4. पुश -यू मूल मास्टर को दबाएं और फिर अपने dmgr2 पर वापस जाएं 5. चेकआउट dmgr2 –

+0

मैंने पहले से ही मेरे सभी परिवर्तन dmgr2 शाखा में किए हैं, क्षमा करें कि –

+0

जोड़ना भूल गया है यदि मैं चरण 4 करता हूं, तो क्या मेरे विकास में मास्टर को मास्टर में बदलाव नहीं करना चाहिए? मैं यह नहीं करना चाहता कि –

उत्तर

360

चरण सूचीबद्ध काम करेंगे, लेकिन वहाँ एक लंबे समय तक रास्ता है कि आप अधिक विकल्प देता है:

git checkout dmgr2  # gets you "on branch dmgr2" 
git fetch origin  # gets you up to date with origin 
git merge origin/master 

fetch आदेश merge से पहले किसी भी बिंदु पर किया जा सकता है, यानी, आप के आदेश स्वैप कर सकते हैं fetch और चेकआउट, क्योंकि fetch सिर्फ नामित रिमोट (origin) पर जाता है और कहता है: "जो कुछ भी आपके पास है वह मुझे दोहराएं", यानी, सभी शाखाओं पर सभी काम करते हैं। वे आपके भंडार में कॉपी हो जाते हैं, लेकिन branch नामक किसी भी शाखा के लिए रिमोट पर origin/branch नामित किया गया है।

इस बिंदु पर आप किसी भी दर्शक (git log, gitk, आदि) का उपयोग कर सकते हैं ताकि वे "उनके पास क्या हैं" जो आप नहीं करते हैं, और इसके विपरीत। कभी-कभी यह केवल गर्म फज़ी भावनाओं के लिए उपयोगी होता है ("आह, हाँ, वास्तव में जो मैं चाहता हूं") और कभी-कभी रणनीतियों को पूरी तरह से बदलने के लिए उपयोगी होता है ("वाह, मैं अभी तक यह सामान नहीं चाहता हूं")।

अंत में, merge आदेश दिया प्रतिबद्ध लेता है, जो आप origin/master के रूप में नाम कर सकते हैं, और जो यह जब आप merge चलाने पर, कि प्रतिबद्ध और अपने पूर्वजों में लाने के लिए जो कुछ भी शाखा आप कर रहे हैं के लिए लेता है। आप तेजी से आगे बढ़ने के लिए --no-ff या --ff-only डाल सकते हैं, या यदि आप चाहें तो परिणाम केवल तेज़ी से आगे बढ़ने पर विलय कर सकते हैं।

आप अनुक्रम का उपयोग करते हैं:

git checkout dmgr2 
git pull origin master 

pull आदेश का निर्देश git fetch चलाने के लिए Git, और फिर git merge origin/master का नैतिक बराबर। तो यह लगभग हाथ से दो चरणों को करने जैसा ही है, लेकिन कुछ सूक्ष्म मतभेद हैं जो शायद आपके लिए भी प्रासंगिक नहीं हैं। (विशेष रूप से fetch कदम pull द्वारा चलाए जा केवलorigin/master से अधिक लाता है, और यह आपके रेपो में रेफरी को अपडेट नहीं करता: किसी भी नए प्रतिबद्ध अप हवाएँ विशेष FETCH_HEAD संदर्भ द्वारा संदर्भित करने के लिए केवल।)

आप और अधिक स्पष्ट git fetch origin का उपयोग करते हैं (तब वैकल्पिक रूप से चारों ओर देखने) और फिर git merge origin/master अनुक्रम, आप भी अपनी खुद की स्थानीय master दूरदराज के साथ तारीख तक नेटवर्क भर में ला सकता है, केवल एक fetch रन के साथ:

git fetch origin 
git checkout master 
git merge --ff-only origin/master 
git checkout dmgr2 
git merge --no-ff origin/master 

उदाहरण के लिए।


इस दूसरे भाग बदल-मैं कर दिया गया है कहते हैं कि "तय" -इन Git 1.8.4, जो अब opportunistically अद्यतन करता है "दूरस्थ शाखा" संदर्भ। (यह रिलीज नोट्स के रूप में, अद्यतन को छोड़ने के लिए एक जानबूझकर डिजाइन निर्णय था, लेकिन यह पता चला है कि अधिक लोग इसे गिट अपडेट करते हैं।यदि आप पुरानी रिमोट-शाखा SHA-1 चाहते हैं, तो यह रीफ्लॉग से सहेजा जा सकता है, और इस प्रकार पुनर्प्राप्त करने योग्य है। यह अपस्ट्रीम रीबेस को खोजने के लिए एक नई गिट 1.9/2.0 सुविधा भी सक्षम बनाता है।)

+12

मैं सिर्फ एक के लिए पूछ रहा हूं, ओह, दोस्त - आप यहां पहले कोड ब्लॉक को पूर्ववत करने के बारे में कैसे जाएंगे (चेकआउट/fetch/विलय)? –

+4

@ रिचब्राडशॉ: 'गिट चेकआउट' आम तौर पर गैर-विनाशकारी होता है और आमतौर पर 'गिट फ़ेच' को पूर्ववत करने का कोई कारण नहीं होता है, इसलिए ऐसा लगता है कि आप एक मर्ज प्रतिबद्धता को वापस करने का तरीका पूछ रहे हैं। उत्तर अन्य कामों के समान है: या तो 'गिट रीसेट' या 'गिट रिवर्ट'। * अप्रकाशित * परिवर्तन 'गिट रीसेट' आमतौर पर सबसे अच्छी विधि है; दूसरों के पास पहले से ही बदलावों के लिए, 'गिट रिवर्ट' बेहतर हो सकता है, लेकिन विलय को वापस करने पर लिनस टोरवाल्ड की सलाह देखें: https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a- दोषपूर्ण-merge.txt – torek

+0

आप कैसे सेट मर्ज दर्शक प्रोग्राम का उपयोग करने के लिए सेट करते हैं? – PositiveGuy

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