Git: एक परिवर्तित स्थानीय शाखा पर सभी परिवर्तनों को छोड़ दें


117

मेरे पास एक स्थानीय विषय शाखा है जो एक दूरस्थ शाखा पर नज़र रख रही है। तर्क के लिए, कहें कि प्रतिबद्ध इतिहास इस तरह दिखता है:

A--B--C--O1--O2--O3 (origin/phobos)
       \
         L1--L2--L3 (phobos)

सापेक्ष प्रतिबद्ध इतिहास को देखने के बाद, मैं अब स्थानीय phobosशाखा में सभी परिवर्तनों को छोड़ना चाहता हूं और इसे सीधे प्रतिलिपि के रूप में प्राप्त करना चाहता हूं origin/phobos, ताकि स्थानीय इतिहास इस तरह दिखाई दे:

A--B--C--O1--O2--O3 (phobos origin/phobos)

मैं वास्तव में phobosशाखा में स्थानीय परिवर्तन नहीं चाहता , और मैं वास्तव में मूल भंडार में बाद में कोई विलय नहीं दिखाना चाहता। (इसलिए, मेरे दिमाग में सिर्फ विलय नहीं है।)

ऐसा लगता है कि यह वास्तव में आसान होना चाहिए, लेकिन मेरे Google-फू ने मुझे विफल कर दिया है। मैं यह कैसे करु?

जवाबों:


79

शाखा हटाएं, फिर इसे बनाएं:

$ git branch -D phobos
$ git checkout --track -b phobos origin/phobos

37
शाखा के सिर को रीसेट करने के इस दृष्टिकोण के साथ एक समस्या यह है कि शाखा को हटाने से शाखा के परिशोधन को उड़ा दिया जाता है। शाखा को रीसेट करना, दूसरी ओर न केवल रिफ्लॉग को संरक्षित करता है, बल्कि वास्तव में रीसेट में रीसेट को रिकॉर्ड करता है। यदि आवश्यक हो तो यह ऑपरेशन को आसानी से प्रतिवर्ती बनाता है।
दान मोल्डिंग

9
@Electrons_Ahoy आपको सुझाव देगा कि आप यहां दिए गए उत्तर को दान में बदल दें (ताकि मेरे जैसे लोग जो गुगुल कर चुके हैं कि इसे कैसे सुरक्षित तरीके से चुनने की संभावना है)।
स्टीव चैंबर्स

4
@ DanMoulding के उत्तर में अनावश्यक होने पर स्थानीय शाखा को हटाना शामिल नहीं है। यह ज्यादा सुरक्षित है।
ब्रम्ह

@brma: ऐसा कैसे? यह अभी भी एक नई प्रतिबद्धता के लिए एक शाखा की ओर इशारा कर रहा है।
मिपदी

5
डान मोल्डिंग का जवाब सुरक्षित है। मुझे लगता है कि आपको उस एक का चयन करना चाहिए।
डैनियल

330
git checkout phobos
git reset --hard origin/phobos

यह Git को phobosउसी कमिट के प्रमुख को रीसेट करने origin/phobosऔर कार्य करने वाले पेड़ को मिलान करने के लिए अद्यतन करने के लिए कहता है ।


35
IMO यह स्वीकृत उत्तर होना चाहिए; यह हटाने या पुन: बनाने के साथ सर्जरी करने के बजाय, शाखा पॉइंटर को ट्रांसप्लांट करने के लिए "रीसेट" कमांड जारी करता है।
vdboor

वास्तव में, मैंने पहले यह कोशिश की और इसने स्थानीय प्रतिलिपि द्वारा लगभग एक अनुपयोगी बनाने में त्रुटियों का एक टन फेंक दिया। डिलीट / रीक्रिएट कम सुरुचिपूर्ण हो सकता है, लेकिन मुझे कोई फॉलो-अप प्रश्न पूछने की आवश्यकता नहीं थी।
इलेक्ट्रॉन्स_अहॉय

3
@Electrons_Ahoy: हम्म, यह निश्चित रूप से सामान्य नहीं है। यदि आपका रेपो अच्छे कार्य क्रम में है, तो इस रीसेट को करना आम तौर पर एक समस्या-मुक्त ऑपरेशन होना चाहिए।
दान मोल्डिंग

या भले ही यह हिंकी हो। अगर आप "गलती से" यह कमांड जारी करते हैं कि वास्तव में यह क्या करता है बिना पढ़े, तो अपने घर को खोजने के लिए git reflog का उपयोग करें। :)
dbn

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