मैं forked रिपॉजिटरी में अपस्ट्रीम शाखा में git मास्टर शाखा को कैसे रीसेट करूं?


107

मैंने अपने कांटेक्ट गिट रेपो की मास्टर शाखा को पूरी तरह से गड़बड़ कर दिया है।

मैं मास्टर शाखा को पूरी तरह से रीसेट करना चाहता हूं जिसे अपस्ट्रीम मास्टर रेपो की सामग्री के साथ मेरे कांटे पर धकेल दिया गया था। मुझे किसी भी मास्टर शाखा में बदलाव या इतिहास को बनाए रखने में कोई दिलचस्पी नहीं है।

सबसे सरल तरीका यह होगा कि मैं अपने कांटे वाले रेपो को हटाकर अपस्ट्रीम प्रोजेक्ट से हटा दूं। हालाँकि, मेरे पास अन्य धक्का देने वाली शाखाओं में काम है जिन्हें मैं खोना नहीं चाहता।

इस प्रकार मैं अपस्ट्रीम मास्टर के साथ अपनी पुश मास्टर शाखा को कैसे रीसेट करूं?


git clone https://myrepo.git
cd myrepo
git remote add upstream https://upstream.git
git fetch upstream

मैं अपनी स्थानीय और दूरस्थ मास्टर शाखाओं को अपस्ट्रीम मास्टर के साथ रीसेट करने के लिए यहाँ से कहाँ जाता हूँ?

जवाबों:


202

आप अपनी स्थानीय मास्टर शाखा को अपस्ट्रीम संस्करण में रीसेट कर सकते हैं और इसे अपने रिपॉजिटरी में धकेल सकते हैं।

यह मानते हुए कि "अपस्ट्रीम" मूल भंडार है और "मूल" आपका कांटा है:

# ensures current branch is master
git checkout master

# pulls all new commits made to upstream/master
git pull upstream master

# this will delete all your local changes to master
git reset --hard upstream/master

# take care, this will delete all your changes on your forked master
git push origin master --force

(आप मूल रेपो को "अपस्ट्रीम" के रूप में परिभाषित कर सकते हैं git remote add upstream /url/to/original/repo।)


1
यह संभवतः git reset --hard upstream/masterकार्यशील निर्देशिका को रीसेट करने के लिए भी होना चाहिए । लेकिन फिर भी आपका जवाब सही है।
j6t 21

स्थानीय परिवर्तनों को ध्यान में रखते हुए "--हार्ड" का उपयोग करना भी काम नहीं करता है। मैं संभवतः अलग-अलग निरीक्षण करने के लिए एक कठिन चरण में हार्ड रीसेट करूंगा।
जोहान्स बारोप

1
यह बहुत मददगार था।
अलीम एस

4
git fetch upstreamपहले कॉल करने की आवश्यकता है
हेनरी ई

3
@HenryE नोट के रूप में, git fetch upstreamआम तौर पर निम्नलिखित गैर-मानव-पठनीय त्रुटि से उपज में पहले बदलाव लाने में विफल :"fatal: ambiguous argument 'upstream/master': unknown revision or path not in the working tree."
सेसिल करी

5

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

git checkout master 
git reset upstream/master
git pull --rebase upstream master
git push origin master --force

पुनश्च: मान लें कि अपस्ट्रीम मूल रेपो है, जबकि मूल आपकी कॉपी है।


ऐसा प्रतीत होता है मानो आपने अपनी शाखा एक अलग प्रतिबद्ध से बनाई है। रिबासिंग का प्राथमिक कारण एक रेखीय परियोजना के इतिहास को बनाए रखना है। यह कहा गया है, कि आप एक सार्वजनिक संग्रह में प्रकाशित होने के बाद कभी भी कमिट न करें क्योंकि यह पुराने कमिट्स को नए के साथ बदल देता है। जानकारी के लिए कृपया देखें atlassian.com/git/tutorials/rewriting-history/git-rebase
user8128167

0

मैंने इस तरह विधि की कोशिश की है:

$REPO=<repo>
$ORIGIN=<user>/$REPO
$UPSTREAM=<upstream>/$REPO

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git reset --hard upstream/master
$ git pull --rebase upstream master
$ git push origin master --force

आउटपुट एक चेतावनी दिखाएगा:

fatal: ambiguous argument 'upstream/master': 
unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

तो सही तरीका git pullपहले रखा जाता है git reset:

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git pull --rebase upstream master
$ git reset --hard upstream/master
$ git push origin master --force

तब आउटपुट इस तरह होगा:

From github.com:<upstream>/<repo>
 * branch                master     -> FETCH_HEAD
 * [new branch]          master     -> upstream/master
HEAD is now at 7a94b1790 Merge pull request #4237 from <upstream>/...
Current branch master is up to date.
Everything up-to-date.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.