2011-06-03 11 views
145

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

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

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

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

+0

संभावित रिपोजिटरी शाखा को रीसेट रिपोजिटरी हेड की तरह रीसेट करने के लिए संभावित डुप्लिकेट] (http://stackoverflow.com/questions/1628088/reset-local-repository-branch-to-be-just-like-remote- भंडार-सिर) –

उत्तर

2

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

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

+0

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

215

पहले, मौजूदा स्थिति में एक नई शाखा का सृजन (मामले में आप अपने पुराने 'बँधा हुआ' इतिहास की जरूरत है):

git branch fubar-pin 

अद्यतन दूरस्थ शाखाओं की अपनी सूची और सिंक नई प्रतिबद्ध:

git fetch --all 

तो, बात करने के लिए अपनी शाखा रीसेट जहां मूल/शाखा अंक:

git reset --hard origin/branch 

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

+2

+1 लेकिन आप रीसेट –

+0

रीसेट करने से पहले 'गिट फ़ेच मूल' करने के लिए एक अनुस्मारक जोड़ना चाहेंगे, मैंने इसे एक मामूली बदलाव के साथ किया और यह काम नहीं किया: गिट फ़ेच - सभी, गिट रीसेट - शेड SHA1OFANOLDCOMMIT, कुछ अन्य सामान), गिट रीसेट - मूल उत्पत्ति/शाखा। अंत परिणाम यह था कि मैं अभी भी पुरानी प्रतिबद्धता में था। तो, यह दृष्टिकोण कुछ मामलों में काम कर सकता है, लेकिन मुझे लगता है कि यह बिल्कुल काम नहीं करता है। – greggles

+0

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

53

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

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

सुनिश्चित करें कि आप नहीं चाहते हैं अपने पुराने शाखा से कुछ भी, इसे हटाने:

git branch -D branch-old 

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

+4

यह सबसे अच्छा जवाब जैसा लगता है। यह केवल मामले में बैकअप प्रतिलिपि बनाने में मदद करता है और परिणामस्वरूप स्थानीय शाखा रिमोट की सटीक प्रतिलिपि होने की संभावना है। – greggles

+0

महान उत्तर, मेरे लिए उपयोगी है। एक प्रश्न: आधिकारिक Git-चेकआउट प्रलेखन कहना है कि अपने 3 आदेश होना चाहिए लगता है: 'Git चेकआउट बी --track /' तुम्हारा समान रूप से अच्छी तरह से काम करता है, बिना '--track'? – Starman

+0

मुझे लगता है कि कॉन्फ़िगर var 'branch.autoSetupMerge' (जो मुझे लगता है कि डिफ़ॉल्ट पर डिफ़ॉल्ट है) '--track' अंतर्निहित बनाता है। और, हां, मेरे सभी गिट सेटअप में मुझे 'चेकआउट-बी' करते समय स्पष्ट रूप से '--track' की आवश्यकता नहीं है, लेकिन वाईएमएमवी। –

संबंधित मुद्दे