दूरस्थ शाखा को स्थानीय शाखा में विलय कैसे करें


238

मेरे पास एक परियोजना की स्थानीय शाखा है ("configUpdate") जो मैंने किसी और की परियोजना से कांटा है और मैंने उस पर परिवर्तनों का भार उठाया है और वे उन परिवर्तनों को मर्ज करना चाहेंगे जो उन्होंने मेरी स्थानीय शाखा में किए हैं।

मैंने कोशिश की

git pull --rebase origin configUpdate

लेकिन इसने नवीनतम परिवर्तनों को नहीं पकड़ा है - मैं दोनों को कैसे मिला सकता हूं? (बोनस अंक के लिए भी मैंने pull --rebaseकमांड के साथ क्या किया ?)


जवाबों:


354

अपनी सुविधा शाखा (उदा configUpdate) से चलाएं:

git fetch
git rebase origin/master

या छोटा रूप:

git pull --rebase

यह क्यों काम करता है:

  • git merge branchnameशाखा से नए कमिट लेता है branchname, और उन्हें वर्तमान शाखा में जोड़ता है। यदि आवश्यक हो, तो यह स्वचालित रूप से शीर्ष पर "मर्ज" जोड़ता है।

  • git rebase branchnameशाखा से नए कमिट लेता है branchname, और आपके परिवर्तनों के तहत उन्हें "सम्मिलित करता है"। अधिक सटीक रूप से, यह वर्तमान शाखा के इतिहास को संशोधित करता है जैसे कि यह उस के शीर्ष पर आधारित है branchname, इसके साथ आपके द्वारा किए गए किसी भी परिवर्तन के साथ।

  • git pullमूल रूप से के रूप में ही है git fetch; git merge origin/master

  • git pull --rebaseमूल रूप से के रूप में ही है git fetch; git rebase origin/master

तो आप git pull --rebaseइसके बजाय उपयोग क्यों करना चाहेंगे git pull? यहाँ एक सरल उदाहरण दिया गया है:

  • आप एक नई सुविधा पर काम करना शुरू करते हैं।

  • जब तक आप अपने परिवर्तनों को आगे बढ़ाने के लिए तैयार होते हैं, तब तक कई कमिट अन्य डेवलपर्स द्वारा धकेल दिए जाते हैं।

  • यदि आप git pull(जो मर्ज का उपयोग करते हैं), तो आपके परिवर्तन नए स्वचालित रूप से बनाए गए मर्ज कमिट के अलावा, नए कमिट द्वारा दफन हो जाएंगे।

  • यदि आप git pull --rebaseइसके बजाय, अपने गुरु को आगे बढ़ाने के लिए तेजी से आगे बढ़ेंगे, तो शीर्ष पर अपने परिवर्तनों को लागू करें।


मैंने यह सही शाखा पर किया था, लेकिन मैं अभी भी अपनी स्थानीय फाइलों और मूल परियोजना की दूरस्थ मास्टर शाखा के बीच अंतर देख सकता हूं (भले ही यह कहता है कि सब कुछ अद्यतित है!) शायद मैंने परियोजना को गलत तरीके से सेट किया है? जांच करने का कोई तरीका?
मार्तीन

1
@ मर्टिन: मतभेद आपके स्थानीय परिवर्तन होने चाहिए। दूरस्थ शाखा का एक और कांटा बनाओ और जाँच करें कि क्या किसी के पास सही फ़ाइल सामग्री है।
7

4
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन ध्यान दें कि आप एक छूट के बजाय एक MERGE करना पसंद कर सकते हैं। यदि आप बाद में एक दूरस्थ रेपो में विलय करना चाहते हैं, जो पहले से ही आपके कुछ बदलाव हैं, तो आप रिबेस नहीं करना चाहते हैं।
डोमिनोज

1
कैसे के बारे में (यह मानकर कि आप वर्तमान में शाखा configUpdate पर हैं) ... git पुल मूल रूप से git fetch के समान है; git मर्ज का मूल / स्वामी। <- सही नहीं
क्रिस

@ क्रिस: किस मायने में यह सच नहीं है? उत्थान के रूप में उत्पत्ति / गुरु की धारणा? या गिट पुल को बदल दिया गया है?
जॉय एडम्स

81

मुझे पता चला कि यह था:

$ git fetch upstream
$ git merge upstream/master

6
इसलिए, यदि आपने इसे पहले ही समझ नहीं लिया है, तो आपका pull --rebaseकाम नहीं हुआ क्योंकि originआपके कांटे की ओर इशारा कर रहा था। अगर आप ऐसा करते तो काम हो जाता git pull --rebase upstream/master
कार्ल बेवेलफेल्ट

3
कोशिश करें: git मर्ज का मूल / स्वामी
क्रिस

मुझे एक भ्रूण याद आ रहा था, इस जवाब ने इसे मेरे लिए हल कर दिया।
नुरेटिन

38

अपनी स्थानीय शाखा में स्विच करें

> गिट चेकआउट configUpdate

अपनी शाखा में दूरस्थ मास्टर को मर्ज करें

> गिट रिबेस मास्टर configUpdate

यदि आपके पास कोई संघर्ष है, तो उन्हें सुधारें और प्रत्येक विवादित फ़ाइल के लिए कमांड करें

> git add [path_to_file / विवादित_file] (जैसे git ऐड ऐप / संपत्ति / javascripts / test.js)

रिबास जारी रखें

> गिट रिबास - कॉन्टिन्यू


मर्ज के बजाय रिबेट का उपयोग करने से डरो मत कुछ समय के अंतर की जांच करें यदि आप इस प्रश्न में अंतर महसूस करते हैं
सर्ज सेलेटस्की

13

git rebase मेरे लिए काम नहीं करता था। गिट रिबेस के बाद, जब मैं अपनी स्थानीय शाखा में परिवर्तनों को धकेलने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती रही ("संकेत: अपडेट अस्वीकार कर दिया गया क्योंकि आपकी वर्तमान शाखा की नोक इसके दूरस्थ समकक्ष के पीछे है। दूरस्थ परिवर्तन (जैसे 'गिट पुल) को एकीकृत करें। .. ') फिर से धक्का देने से पहले। ") गिट पुल के बाद भी। आखिरकार मेरे लिए क्या काम किया गया था।

git checkout <local_branch>
git merge <master> 

यदि आप मेरी तरह शुरुआती हैं, तो यहाँ git merge vs git rebase पर एक अच्छा लेख है। https://www.atlassian.com/git/tutorials/merging-vs-rebasing

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.