मैं 'मास्टर' को 'मूल / मास्टर' में कैसे रीसेट करूं?


215

क्या मैं निम्नलिखित कार्य सरल तरीके से कर सकता हूं?

git checkout origin/master
git branch -D master
git branch master
git checkout master

कभी-कभी, यह काम करने वाले पेड़ को छूने के बिना किया जा सकता है: stackoverflow.com/a/12343727/586086
एंड्रयू माओ

6
कृपया अपना स्वीकृत उत्तर अपडेट करें: @ KindDragon का उत्तर सही और छोटा है।
रॉबर्ट सिएमर

जवाबों:


310

के रूप में KindDragon के जवाब का उल्लेख है, आप पुन: कर सकते हैं masterपर सीधे origin/masterके साथ:

git checkout -B master origin/master

git checkoutआदमी पेज का उल्लेख है:

यदि -Bदिया जाता है, <new_branch>तो बनाया जाता है यदि यह मौजूद नहीं है; अन्यथा, यह रीसेट है । यह लेन-देन के बराबर है

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

मूल रूप से सुझाया गया:

कुछ इस तरह:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

चरण 2 वैकल्पिक होने के साथ।


1
आप एक लाइन के साथ ऐसा कर सकते हैं।
रॉबर्ट सिएमर

93

Git इस आदेश का समर्थन करता है:

git checkout -B master origin/master

की जाँच करें origin/masterशाखा और उसके बाद रीसेट masterशाखा वहाँ।


4
एकमात्र सही जवाब।
रॉबर्ट सिएमर

3
चार कीस्ट्रोक्स बचाएं - आपको उद्धरण चिह्नों की आवश्यकता नहीं है। बस: git चेकआउट -B मास्टर मूल / मास्टर
zumalifeguard

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

1
क्या आपको यह git fetch origin masterसुनिश्चित करने के लिए पहले से origin/masterअपडेट नहीं है?
पेड्रोजथ

हां, सभी समाधानों के साथ आपको git fetchपहले करना चाहिए
KindDragon

29

मुझे लगता है कि इस विकल्प की तुलना में VonC के जवाब में भी जटिलता है:

git update-ref refs/heads/master origin/master
git reset --hard master

git स्वचालित रूप से रेफ के प्रत्येक मान (रिफ्लग के माध्यम से) को लॉग करता है। इसलिए जब आप उस कमांड को चलाते हैं, तो master@{1}मास्टर के पिछले मूल्य को संदर्भित करता है।

VonC का उत्तर सही है, लेकिन यह फाइल सिस्टम में मास्टर के पुराने मान को चेक आउट करने में समय बर्बाद करता है।

यदि आप रेपो में अनाथ वस्तुओं की परवाह करते हैं, तो आप दौड़ सकते हैं git gc


1
एक दिलचस्प विकल्प लगता है। +1
वॉनक

मैं अभी भी मिलता हूंAlready on 'master'
yourfriendzak

@yourfriendzak, मैं इस बात को भूल गया कि आप मास्टर को अपडेट करने से पहले ही जाँच कर सकते हैं। मैंने एक होने का उत्तर अपडेट किया है जो उस मामले में भी काम करना चाहिए।
अलेक्जेंडर बर्ड

यह तब भी काम करता है, जब आप मास्टर पर नहीं होते हैं (एक अलग राज्य की तरह जो वास्तव में टिप मूल / मास्टर की ओर इशारा करता है)। फिर, आप रेपो के माध्यम से पुरानी फ़ाइलों को फ्लिप करने के बिना मास्टर चेकआउट कर सकते हैं। महान!
एंड्रयू माओ

20

यदि आप पहले से ही हैं तो आप masterनिम्न कार्य कर सकते हैं:

git reset --hard origin/master

यह स्थानीय masterशाखा को रिमोट को इंगित करेगा origin/masterऔर काम करने वाले डायर में किसी भी संशोधन को छोड़ देगा।


और फाइल्स डिलीट कर देगा! यदि आपने फ़ाइलें बनाई / संपादित की हैं, और उन पर "गिट ऐड" चलाया है, तो यह कमांड उन्हें हटा देगा। चेतावनी दी।
चीज़ो

क्या यह दृष्टिकोण इससे बेहतर है git checkout -B master origin/master?
जिम अहो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.