git - मास्टर से विकास शाखा में गिट खींचें




pull (2)

मेरे पास dmgr2 (विकास) नामक एक शाखा है और मैं मास्टर शाखा (लाइव साइट) से खींचना चाहता हूं और अपनी विकास शाखा में सभी परिवर्तनों को शामिल करना चाहता हूं। क्या ऐसा करने के लिए इससे अच्छा तरीका है? यहां मैंने जो करने की योजना बनाई थी:

 git checkout dmgr2
 git pull origin master

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


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

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 ) पर जाता है और कहता है: "आपके पास जो कुछ भी है उसे पूरा करें मैं नहीं करता ", यानी, सभी शाखाओं पर सभी काम करता है। उन्हें आपके भंडार में कॉपी किया जाता है, लेकिन रिमोट पर शाखा नाम की किसी भी शाखा के लिए origin/branch शाखा नामित किया जाता है।

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

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

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

git checkout dmgr2
git pull origin master

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

यदि आप अधिक स्पष्ट git fetch origin (फिर वैकल्पिक रूप से चारों ओर देखते हैं) का उपयोग करते हैं और फिर git merge origin/master अनुक्रम को 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

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

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


स्थिति: मेरी स्थानीय शाखा में काम करना, लेकिन मुझे देव शाखा में अद्यतन रखना पसंद है।

समाधान: आमतौर पर मैं करना पसंद करता हूं

"गिट fetch" "गिट rebase उत्पत्ति / देव"





pull