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


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

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

169
2018-04-20 10:34


मूल


कभी-कभी, यह काम करने वाले पेड़ को छूए बिना किया जा सकता है: stackoverflow.com/a/12343727/586086 - Andrew Mao
कृपया अपना स्वीकृत उत्तर अपडेट करें: @ KindDragon का उत्तर सही और छोटा है। - Robert Siemer


जवाब:


जैसा 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 वैकल्पिक होने के साथ।


229
2018-04-20 11:22



आप इसे एक पंक्ति से कर सकते हैं। - Robert Siemer


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

git checkout -B master origin/master

इसकी जाँच पड़ताल करो origin/master शाखा और फिर रीसेट करें master वहां शाखा


74
2017-08-24 19:30



एकमात्र सही जवाब। - Robert Siemer
चार कीस्ट्रोक सहेजें - आपको उद्धरण की आवश्यकता नहीं है। बस: गिट चेकआउट -बी मास्टर मूल / मास्टर - zumalifeguard
मान लें कि मैंने 2 चीजें की हैं, पहला व्यक्ति शाखा के साथ विलय है और दूसरा नियमित है। यदि मैं मूल / मास्टर पर वापस जाता हूं तो विलय के साथ क्या होता है? - utdev
आपको नहीं करना है git fetch origin master सुनिश्चित करने से पहले origin/master यह अद्यतित है? - pedrozath
हाँ, निश्चित रूप से आपको सभी समाधानों के साथ करना चाहिए git fetch प्रथम - KindDragon


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

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

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

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

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


28
2018-01-23 20:48



एक दिलचस्प विकल्प लगता है। +1 - VonC
मुझे अभी भी मिलता है Already on 'master' - yourfriendzak
@yourfriendzak, मैं इस बात को लेकर भूल गया कि मास्टर को अपडेट करने से पहले आपके पास मास्टर चेक आउट हो सकता है। मैंने जवाब को अद्यतन किया है जो उस मामले में भी काम करना चाहिए। - Alexander Bird
यह तब भी काम करता है जब आप मास्टर पर नहीं हैं (एक पृथक हेड स्टेटस की तरह जो वास्तव में टिप मूल / मास्टर को इंगित कर रहा है)। फिर, आप रेपो के माध्यम से पुरानी फाइलों को फ्लिप किए बिना चेकआउट मास्टर कर सकते हैं। महान! - Andrew Mao


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

git reset --hard origin/master

यह स्थानीय को इंगित करेगा master रिमोट के लिए शाखा origin/master और कामकाजी डीआईआर में किसी भी संशोधन को त्यागें।


12
2018-06-25 15:47



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


आप पहले से ही मास्टर हैं। आप रिमोट उत्पत्ति को हटाना चाहते हैं git pull कुछ नहीं करता इसलिए

git remote rm origin

यदि आप इसे महसूस करते हैं तो आप रिमोट रिपोजिटरी के मूल के रूप में वर्तमान भंडार को जोड़ सकते हैं।

एनबी: यदि स्थानीय रिमोट से आगे है तो आपका समाधान स्थानीय परिवर्तनों को मिटा देगा!


-2
2018-01-28 03:04



यह जवाब कोई समझ नहीं आता है। - ADTC
यह सीधे भ्रामक है और परियोजना पर लोगों को चोट पहुंचा सकती है। - Wisienkas
यह सही नहीं है। मुझे यकीन नहीं है कि आप एक अपवित्र क्यों था। - Saher Ahwal