दूरस्थ शाखा के साथ मेरी स्थानीय शाखा को अधिलेखित करना


153

मैंने अपनी स्थानीय शाखा को पूरी तरह से विफल कर दिया है, और शुरू करना चाहूंगा। सर्वर पर संस्करण सही है।

मैं शुरू नहीं करना चाहता, मैं अपने विशाल स्क्रू को ठीक करने के लिए अपने स्थानीय इतिहास का उपयोग करना चाहूंगा। (अगर मुझे करना हो तो कर सकते हैं।)

git fetch branchname, और git pull branchnameकाम नहीं करते। मुझे मिलने वाला संदेश " अप टू डेट " है, हालांकि, मेरा स्थानीय संस्करण सर्वर से मेल नहीं खाता है।

git pull origin/branchnameमुझे " नहीं मिली " त्रुटि देता है।


जवाबों:


248

सबसे पहले, वर्तमान स्थिति में एक नई शाखा बनाएं (यदि आपको अपने पुराने 'खराब इतिहास' की आवश्यकता है):

git branch fubar-pin

दूरस्थ शाखाओं की अपनी सूची को अपडेट करें और नए आवागमन को सिंक करें:

git fetch --all

उसके बाद, अपनी शाखा को उस बिंदु पर रीसेट करें जहाँ मूल / शाखा इंगित करती है:

git reset --hard origin/branch

सावधान रहें , यह आपके काम के पेड़ से किसी भी परिवर्तन को हटा देगा !


2
+1 लेकिन आप git fetch originरीसेट से पहले करने के लिए एक रिमाइंडर जोड़ना चाहते हैं
मार्क लॉन्गेयर

मैंने एक मामूली बदलाव के साथ ऐसा किया और यह काम नहीं किया: git fetch --all, git reset --hard SHA1OFANOLDCOMMIT, (कुछ अन्य सामान), git रीसेट-hard उत्पत्ति / शाखा। अंतिम परिणाम यह था कि मैं अभी भी पुरानी प्रतिबद्धता पर था। तो, यह दृष्टिकोण कुछ मामलों में काम कर सकता है, लेकिन मुझे लगता है कि यह सभी में काम नहीं करता है।
१५

@greggles: कोई त्रुटि? अंतिम आदेश के बाद, HEAD को मूल / शाखा में इंगित करना चाहिए।
प्रातः

1
@ गेविन: नहीं, यह किसी भी परिस्थिति में अन्य शाखाओं को प्रभावित नहीं करेगा origin/branch। कभी नहीँ।
नाइटल

1
@greggles मुझे पता है कि यह बहुत देर हो चुकी है लेकिन अन्य लोगों के लिए यह सोचकर कि ऐसा क्यों हो सकता है, यह दृष्टिकोण केवल तभी काम करेगा जब आपके पास एक शाखा की जाँच हो। यह आपके लिए काम नहीं करता था क्योंकि आप अलग राज्य में थे , (HEAD एक बिंदु पर, शाखा नहीं) और ये आदेश केवल तभी काम करते हैं यदि HEAD एक शाखा की ओर इशारा कर रहा हो। जब आप करते हैं git resetजब HEAD एक शाखा की ओर इशारा करता है, तो वह शाखा अनुसरण करेगी।
माइकल डोरस्ट

60

जब मैं अपनी स्थानीय शाखा में गड़बड़ी करता हूं तो क्या मैं अपनी टूटी शाखा का नाम बदल देता हूं, और फिर से ऊपर की शाखा की जांच / शाखा करता हूं:

git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch

फिर अगर आपको यकीन है कि आप अपनी पुरानी शाखा से कुछ नहीं चाहते हैं, तो उसे हटा दें:

git branch -D branch-old

लेकिन आमतौर पर मैं पुरानी शाखा को स्थानीय स्तर पर छोड़ देता हूं, बस अगर मेरे पास वहां कुछ होता है।


4
यह सबसे अच्छा उत्तर लगता है। यह सिर्फ मामले में एक बैकअप प्रतिलिपि बनाने में मदद करता है और लगता है कि स्थानीय शाखा में दूरस्थ एक की सटीक प्रतिलिपि होने की संभावना है।
१५

महान जवाब, मेरे लिए उपयोगी। One Q: आधिकारिक git-checkout दस्तावेज़ीकरण यह कहता प्रतीत होता है कि आपका 3rd कमांड होना चाहिए: git checkout -b <branch> --track <remote>/<branch>क्या आपके बिना, समान रूप से अच्छी तरह से काम करता है --track?
Starman

1
मुझे लगता है कि config var branch.autoSetupMerge(जो मुझे लगता है कि डिफ़ॉल्ट को सही लगता है) --trackनिहित करता है। और, हाँ, मेरे सभी git setups में मुझे स्पष्ट रूप से --trackएक checkout -b, लेकिन YMMV करने की आवश्यकता नहीं है ।
केसी मार्शल

5

आपकी स्थानीय शाखा के पास इसके संशोधन की संभावना है जिसे आप छोड़ना चाहते हैं। ऐसा करने के लिए, आपको git resetउस शाखा प्रमुख को अंतिम स्थान पर रीसेट करने के लिए उपयोग करना होगा जिसे आपने अपस्ट्रीम रेपो की शाखा से हटा दिया था। git branch -vअपस्ट्रीम शाखा की sha1 आईडी खोजने के लिए उपयोग करें , और अपनी शाखा का उपयोग करके इसे रीसेट करें git reset SHA1ID। तब आपको git checkoutअपनी निर्देशिका में छोड़े गए परिवर्तनों को त्यागने में सक्षम होना चाहिए ।

ध्यान दें: हमेशा एक बैक-अप रेपो पर ऐसा करें। इस तरह से आप आश्वस्त कर सकते हैं कि आपने स्वयं काम किया है। या अगर यह नहीं था, तो आप को वापस करने के लिए एक बैकअप है।


ऐसा लगता है कि यह शायद काम करेगा, लेकिन "कहीं और अपने काम की प्रतिलिपि बनाएँ, दूरस्थ शाखा की एक नई प्रतिलिपि बनाएँ" के दृष्टिकोण की सादगी और विश्वसनीयता को देखते हुए मैं यह देखने में विफल रहता हूं कि यह कैसे बेहतर है।
greggles

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