git सभी परिवर्तनों को त्याग देता है और ऊपर की ओर से खींचता है


144

मैं अपस्ट्रीम रेपो कैसे लाऊं और इसे मास्टर की जगह दूं? मेरे रेपो पर केवल एक शाखा है, जो मास्टर है, और मैंने इसे पूरी तरह से गड़बड़ कर दिया है, इसलिए मुझे मूल रूप से ऊपर से शुरू करना होगा। मुझे लगता है कि init काम करेगा, लेकिन क्या कोई आसान तरीका है?

जवाबों:


250

यहां आप कम से कम दो चीजें कर सकते हैं-आप दूरस्थ रेपो को फिर से प्राप्त कर सकते हैं, या आप reset --hardसामान्य पूर्वज के लिए कर सकते हैं और फिर एक पुल कर सकते हैं, जो दूरस्थ मास्टर पर नवीनतम प्रतिबद्ध के लिए तेजी से अग्रेषित करेगा।

ठोस होने के लिए, यहाँ नेविक रेहेल के मूल उत्तर का एक सरल विस्तार है:

git reset --hard origin/master
git pull origin master

नोट : उपयोग करने git reset --hardसे कोई भी परिवर्तन नहीं होगा, और यदि आप कार्य करने के लिए नए हैं तो इस आदेश के साथ स्वयं को भ्रमित करना आसान हो सकता है, इसलिए सुनिश्चित करें कि आगे बढ़ने से पहले आपको यह समझ में आ जाए कि यह क्या करने जा रहा है।


1
वहाँ बाहर बदमाशों के लिए और अधिक मदद: git gcसफाई और कुछ हाउसकीपिंग के माध्यम से चलाता है। एक और नोट पर, मैं कभी नहीं चला git gc। यह चलाने के लिए अच्छा है, लेकिन जरूरत नहीं है।
जोशुआ नृत्य

@JoshuaDance - अच्छी बात है। मुझे यकीन नहीं है कि मैंने मूल रूप से इसे क्यों शामिल किया।
एरिक वॉकर

23

शाखा मास्टर के समय: git reset --hard origin/master

तो कुछ के साथ सफाई git gc(आदमी पृष्ठों में इस बारे में और अधिक)

अपडेट: आपको संभवतः एक git fetch origin(या git fetch origin masterयदि आप केवल उस शाखा को चाहते हैं) करने की आवश्यकता होगी; रीसेट से पहले या बाद में ऐसा करने से कोई फर्क नहीं पड़ता। (साभार @ एरिक-वाकर)


1
के बाद आपको एक पुल करने की आवश्यकता हो सकती है reset --hard
एरिक वॉकर

रीसेट से पहले git लाने के लिए एक बार मास्टर से खींचना आवश्यक नहीं है।
sciritai

@sciritai: मेरी टिप्पणी मूल से लाने के उल्लेख से पहले जोड़ा गया था।
एरिक वॉकर

19

आप इसे एक ही आदेश में कर सकते हैं:

git fetch --all && git reset --hard origin/master

या आदेशों की एक जोड़ी में:

git fetch --all
git reset --hard origin/master

ध्यान दें कि आप अपने सभी स्थानीय परिवर्तन खो देंगे


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

वॉइला, अब आपका कांटा वापस ऊपर की तरह है।


0

मुझे अब एहसास हुआ कि इसके बजाय git fetch --all && git reset --hard origin/master, यह होना चाहिए git fetch --all && git reset --hard origin/<branch_name>, बजाय (यदि कोई एक अलग शाखा पर काम करता है)

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