रिमोट मास्टर के साथ स्थानीय शाखा को कैसे रिबास करें


930

मेरे पास दूरस्थ रिपॉजिटरी से एक मास्टर शाखा से एक क्लोन प्रोजेक्ट है remote_repo। मैं एक नई शाखा बनाता हूं और मैं उस शाखा के लिए प्रतिबद्ध हूं। अन्य प्रोग्रामर remote_repoमास्टर शाखा में धकेल दिए गए।

मुझे अब remote_repoमास्टर पर अपनी शाखा आरबी को फिर से बनाने की आवश्यकता है ।

यह कैसे करना है? टर्मिनल में टाइप करने के लिए क्या आज्ञा है?


14
मेरे लिए यह सवाल अस्पष्ट है कि "किसके साथ" का अर्थ किसी भी दिशा में पुन: विकास हो सकता है। जवाब मुझे लगता है कि इरादे अपनी शाखा rebase करने के लिए है को देखते हुए पर दूरदराज के मास्टर, नहीं दूसरी तरह के आसपास। मैं इसका उल्लेख उस स्थिति में करता हूं जब कोई व्यक्ति नीचे दिए गए उत्तर का अनुसरण करता है और जो चाहता है उसे उलट देता है।
ग्लेन लॉरेंस

8
@GlennLawrence मुझे लगता है कि टिप्पणी जोड़ने की तुलना में मूल प्रश्न को संपादित करना बेहतर है। यह स्टैकओवरफ्लो द्वारा भी प्रोत्साहित किया जाता है। इसके अलावा, आरबी पर मास्टर रिबासिंग शायद वैसे भी विफल हो जाएगा, क्योंकि आरबी मास्टर के इतिहास पर निर्भर करता है।
डेनियल कुल्मन

जवाबों:


1243

पहले नए मास्टर को अपस्ट्रीम रिपॉजिटरी से लाएं, फिर उस पर अपनी कार्य शाखा को रीबेज करें:

git fetch origin            # Updates origin/master
git rebase origin/master    # Rebases current branch onto origin/master

अद्यतन : कृपया पॉल ड्रेपर के उत्तर को और अधिक संक्षिप्त तरीके से करने के लिए देखें - हाल ही में Git संस्करण उपरोक्त दो कमांडों के बराबर करने के लिए एक सरल तरीका प्रदान करते हैं।


16
यह एकमात्र उत्तर है जो वास्तव में वही करता है जो पूछा गया था
kayaker243

5
@ kayaker243 नहीं, यह पॉल ड्रेपर्स के उत्तर के समान है लेकिन लंबे रूप में, मुझे लगता है।
erik

7
@erik ध्यान दें कि पॉल ड्रेपर ने kayaker243 की टिप्पणी के लगभग आधे साल बाद (और इस उत्तर के लगभग दो साल बाद) अपना उत्तर लिखा।
Frerich Raabe

3
मुझे निम्नलिखित मिलते हैं: ऐसा Your branch and 'origin/b1' have diverged, # and have 3 and 2 different commits each, respectively.लगता है जैसे दूसरे git pullकी आवश्यकता है। क्या यह सही है या मैं यहां कुछ याद कर रहा हूं?
Dror

2
@ आरजीसी नहीं, git rebase masterदूसरी कमांड ( git rebase origin/master) के बाद से एक ही काम नहीं करेगा masterऔर origin/masterअलग-अलग कमिट्स को इंगित कर सकता है (विशेष रूप से यह देखते हुए कि पहला कमांड था git fetch origin, जो संशोधित हो सकता है origin/master)।
Frerich Raabe

810
git pull --rebase origin master
# where --rebase[=(false|true|merges|preserve|interactive)]

19
(फ्राइरिच के जवाब के बराबर)
पॉल ड्रेपर

12
यह फ्रेरिच के उत्तर से थोड़ा अलग नहीं है, इसमें यह स्थानीय मास्टर पर मूल मास्टर से परिवर्तन करेगा, जबकि फ्रेरिच का जवाब स्थानीय मास्टर को अछूता छोड़ देता है? (पुल बनाम भ्रूण)
जिमी हच

7
नहीं, फ्रेरिच के जवाब में, रिबास स्थानीय मास्टर को संशोधित करता है। पुल - ब्रेस्बेस वही चीज है जो रिबेक के बाद
आती है

9
FYI करें आप के साथ इंटरैक्टिव git pull --rebase=interactive origin master
विद्रोह

14
@ADominem - मैंने गिट-पुल प्रलेखन की जाँच की , और मैं स्थानीय मास्टर को संशोधित करने के दावे का समर्थन करने वाली किसी भी चीज़ को नहीं देख सकता। अगर मैं नाम की एक शाखा पर हूं devऔर चला जा रहा हूं git pull --rebase origin master, तो केवल शाखा devको संशोधित किया जाएगा, नहीं master--rebaseझंडा प्रलेखन कहा गया है कि यह प्रयास करता है करने के लिए rebase the current branch on top of the upstream branch after fetchingऔर स्थानीय ट्रैकिंग शाखाओं संशोधित करने के बारे में कुछ भी नहीं।
मोनिका 2331977

223

अपनी शाखा में परिवर्तन करने के बाद, masterरेपो से इसके नवीनतम परिवर्तनों को प्राप्त करने के लिए इसे चेकआउट करें और इसे खींचें:

git checkout master
git pull origin master

फिर अपनी शाखा की जाँच करें और अपने बदलावों को फिर से करें master:

git checkout RB
git rebase master

... या एक पंक्ति में दो अंतिम आदेश:

git rebase master RB

जब वापस धक्का देने की कोशिश कर रहे हैं origin/RB, तो आप शायद एक त्रुटि प्राप्त करेंगे; यदि आप केवल एक ही काम कर रहे हैं RB, तो आप जोर लगा सकते हैं:

git push --force origin RB

... या निम्नानुसार यदि आपने उचित रूप से कॉन्फ़िगर किया है:

git push -f

4
जब मूल / आरबी पर वापस धकेलने का प्रयास किया जाता है, तो आपको संभवतः एक त्रुटि मिलेगी। यदि आप केवल आरबी पर काम कर रहे हैं, तो आप मूल आरबी को धक्का दे सकते हैं। स्रोत: stackoverflow.com/questions/8939977/…
जॉय बारूक

1
आह .... मेरे पास बिल्कुल यही है। मेरे "आरबी" को सही ढंग से रिबूट किया गया है, लेकिन मुझे रिबास के बाद इसे पुश करने की कोशिश करने पर अंतहीन त्रुटियां मिलती हैं। इसके अलावा धक्का - प्रवर्तन मूल आरबी - क्या ऐसा करने के लिए एक "अच्छे" (गैर मजबूर) तरीका है? मैं बस यहाँ धारणाओं को समझने की कोशिश करता हूँ - और असफल।
मोति श्नोर

2
@MottiShneor नहीं, कोई अच्छा तरीका नहीं है। यदि कोई अन्य व्यक्ति इस बीच शाखा में धकेलता है, तो उनके परिवर्तन नष्ट हो जाएंगे! यदि आप git प्रतिबद्ध इतिहास के लिए अच्छा होना चाहते हैं, तो आपको अपनी शाखा में मास्टर को मर्ज करना चाहिए, जो सुरक्षित है (आप इसके git pushबिना कर सकते हैं -f)।
डेनियल कुल्मन

109

नोट: यदि आपके पास पहले से ही रिबास के बारे में व्यापक ज्ञान है तो तेज रिबास के लिए एक लाइनर के नीचे का उपयोग करें। समाधान: मान लें कि आप अपनी कार्य शाखा में हैं और आप इस पर काम करने वाले एकमात्र व्यक्ति हैं।

git fetch && git rebase origin/master

किसी भी संघर्ष को हल करें, अपने कोड का परीक्षण करें, प्रतिबद्ध करें और नए परिवर्तनों को दूरस्थ शाखा में धकेलें।

                            ~:   For noobs   :~

निम्नलिखित कदम किसी को भी मदद कर सकते हैं जो नए हैं git rebaseऔर इसे बिना किसी परेशानी के करना चाहते हैं

चरण 1: यह मानते हुए कि इस बिंदु पर YourBranch पर किए जाने वाले कोई भी परिवर्तन और परिवर्तन नहीं हैं। हम YourBranch पर जा रहे हैं।

git checkout YourBranch
git pull --rebase

क्या हुआ? आपकी शाखा पर काम करने वाले अन्य डेवलपर्स द्वारा किए गए सभी परिवर्तनों को खींचता है और इसके शीर्ष पर आपके परिवर्तनों को रद्द करता है।

चरण 2: प्रस्तुत किसी भी संघर्ष को हल करें।

चरण 3:

git checkout master
git pull --rebase

क्या हुआ? दूरस्थ मास्टर से सभी नवीनतम परिवर्तन खींचता है और दूरस्थ मास्टर पर स्थानीय मास्टर को विद्रोह करता है। मैं हमेशा रिमोट मास्टर को साफ रखता हूं और तैयार करता हूं! और, स्थानीय स्तर पर केवल मास्टर या शाखाओं पर काम करना पसंद करते हैं। मैं इसे तब तक करने की सलाह देता हूं जब तक कि आप परिवर्तन या कमिट पर हाथ नहीं लगा लेते। नोट: यदि आप स्थानीय मास्टर को बनाए नहीं रख रहे हैं, तो इस चरण की आवश्यकता नहीं है, इसके बजाय आप सीधे स्थानीय शाखा पर सीधे दूरस्थ रूप से एक भ्रूण और रिबास कर सकते हैं। जैसा कि मैंने शुरुआत में सिंगल स्टेप में उल्लेख किया है।

चरण 4: प्रस्तुत करने वाले किसी भी संघर्ष को हल करें।

चरण 5:

git checkout YourBranch
git rebase master

क्या हुआ? मास्टर पर रिबेस होता है

चरण 6: यदि कोई विवाद है, तो किसी भी विवाद को हल करें। git rebase --continueसुलझे हुए संघर्षों को जोड़ने के बाद छूट जारी रखने के लिए उपयोग करें । किसी भी समय आप git rebase --abortरिबेट का उपयोग कर सकते हैं ।

चरण 7:

git push --force-with-lease 

क्या हुआ? अपने दूरस्थ YourBranch में परिवर्तन करना। --force-with-leaseयह सुनिश्चित करेगा कि क्या आप रिबासिंग करते समय अन्य डेवलपर्स से YourBranch के लिए कोई अन्य आवक परिवर्तन कर रहे हैं। यह बल धक्का के बजाय सुपर उपयोगी है। यदि कोई आवक परिवर्तन होता है, तो परिवर्तन लाने से पहले अपने स्थानीय YourBranch को अपडेट करने के लिए उन्हें प्राप्त करें।

मुझे परिवर्तनों को आगे बढ़ाने की आवश्यकता क्यों है? उचित रिबेट के बाद दूरस्थ YourBranch में प्रतिबद्ध संदेश को फिर से लिखना या यदि कोई विवाद हल हो गए हैं? फिर आपको स्थानीय रिपो में हल किए गए परिवर्तनों को YourBranch के रिमोट रेपो में धकेलना होगा

YAHOOOO ...! आप सफलतापूर्वक विद्रोह करने के साथ किया जाता है।

आप भी कर सकते हैं:

git checkout master
git merge YourBranch

कब और क्यों? यदि आप और अन्य सह-डेवलपर्स द्वारा किए गए परिवर्तनों के साथ मास्टर में अपनी शाखा को मर्ज करें। जब आप बाद में उसी शाखा पर काम करना चाहते थे, तो आपका बर्नचार्ज मास्टर के साथ अप-टू-डेट हो जाता है।

                            ~:   (๑ơ ₃ ơ)♥ rebase   :~

इसके लिए यह क्या है: "मास्टर से सभी नवीनतम परिवर्तन खींचता है और नवीनतम मास्टर पर विद्रोही मास्टर।" मास्टर पर रिबेस मास्टर? क्या आपको केवल नवीनतम मास्टर को खींचने की आवश्यकता नहीं है?
जॉन लिटिल

@JohnLittle बाहर इशारा करने के लिए धन्यवाद। मेरा मतलब है Pulls latest changes from remote master to local master. I always prefer keeping remote master clean and release ready always!। मैं अपने विवरण को अपडेट करूंगा।
bh4r4th

21

चरण 1:

git fetch origin

चरण 2:

git rebase origin/master

चरण 3: (यदि कोई विरोध हो तो ठीक करें)

git add .

चरण 4:

git rebase --continue

चरण 5:

git push --force

5
किस शाखा को शुरू करना है, इसका कोई स्पष्टीकरण नहीं। अच्छा जवाब नहीं।
कार्ल मॉरिसन

12

1. पहले मास्टर का उपयोग करें ...

git checkout [master branch]
git pull [master branch]

२.अब रिबास सोर्स-ब्रांच विथ मास्टर ब्रांच

git checkout [source branch]
git rebase [master branch]
git pull [source branch] (remote/source branch)
git push [source branch]

यदि स्रोत शाखा अभी तक रिमोट पर मौजूद नहीं है तो करें:

git push -u origin [source branch]

"ए टी वोइला ..."


मुझे इस उत्तर की चरण-दर-चरण प्रकृति पसंद है। यह वास्तव में क्या हो रहा है, इसे तोड़ने में मदद करता है।
डेव लियू

6

git fetch origin master:master बिना जांचे-परखे गुरु के नवीनतम संस्करण को खींचता है।

तो आप सभी की जरूरत है:

git fetch origin master:master && git rebase master 👌


क्या इसे git fetchअपडेट करने की आवश्यकता के बिना भी मास्टर अपडेट नहीं करता है? सिवाय इसके कि git fetchऐसा नहीं करता git mergeअपडेट ना? इसलिए यदि हम जांच masterकरते हैं तो इसमें नवीनतम अपडेट नहीं होंगे। तो क्या यह सुविधा शाखा पर करते समय छोटा नहीं है, git fetchतब git rebase origin/master? हम ऐसा नहीं कर सकते git rebase masterक्योंकि यह masterकार्यक्षेत्र से छूट देने की कोशिश करेगा , हमें origin/masterस्थानीय में बैठे हुए अनमना से प्राप्त करने की आवश्यकता है।
Noitidart
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.