2011-04-11 13 views
14

पूर्ववत करें मैंने अपने गिट रेपो को थोड़ा गड़बड़ कर दिया है। मैंने एक अलग शाखा में एक फीचर पर काम किया। काम खत्म करने के बाद, मैंने इसे मर्ज करने के लिए मास्टर के पास स्विच किया, लेकिन मेरे साथी ने कुछ फाइलों को धक्का दिया जो मेरे साथ संघर्ष में आया। विलय के बाद, संघर्ष और नए बदलावों को धक्का देने के बाद, मैंने देखा कि मैंने अपने साथी के पुराने बदलाव भी किए हैं।पिछली प्रतिबद्धता/विलय

अब मैं इस प्रतिबद्धता/विलय को फिर से करना चाहता हूं। मैंने git reset --soft HEAD^ की कोशिश की लेकिन जब मैं धक्का देना चाहता था, तो मुझे यह त्रुटि संदेश Merge the remote changes before pushing again मिला।

क्या कोई मेरी मदद कर सकता है?

+0

http://stackoverflow.com/questions/1377845/git-reset-hard-and-a-remote-repository – plaes

उत्तर

5

हेहे, आप लगभग यह सोचा बाहर:

git reset --hard HEAD^ 
+1

अरे plaes धन्यवाद, लेकिन मैं रखना चाहते हैं: --force का प्रयोग करें फाइलें मैंने गलत तरीके से धक्का दिया है। क्या इसके लिए कोई समाधान है? –

+0

'गिट रीसेट - सॉफ्ट 'आपकी मदद कर सकता है। – LaraChicharo

27

आपका सुविधा शाखा अभी भी अपने काम को इंगित करेंगे। आप उन परिवर्तनों को खो देंगे नहीं।

रूप plaes कहा, तुम गुरु

git reset --hard HEAD^ 

आप विलय के बिना अपने शाखा से कुछ विशिष्ट फ़ाइल को पकड़ने की चाहते हैं के साथ वापस एक रीसेट कर सकते हैं, तो आप उन्हें बाहर की जाँच कर सकते हैं:

git checkout yourbranch -- file1 file2 etc 

हैं आप मर्ज से पहले से गुरु से कुछ फाइलें चाहते आप भी इन बाहर की जाँच कर सकते हैं:

git checkout master^ -- file3 file4 etc 

यह आदर्श नहीं है लेकिन कभी-कभी इसकी आवश्यकता होती है। एक मर्ज/मई/मतलब है कि आप किसी भी तरफ से कुछ बदलावों को अस्वीकार कर देते हैं।

git merge --no-commit yourbranch 
गुरु से

, तो ऊपर से Git चेकआउट आदेशों को चलाने के लिए और अंत में प्रतिबद्ध:

git add . -A 
git commit 

जब आप अब इस शाखा धक्का, आप की आवश्यकता होगी एक उचित मर्ज को प्राप्त करने का सबसे अच्छा तरीका है force विकल्प

git push --force 

या

git push -f 
जोड़ने के लिए

उम्मीद है कि यह मदद करता है।

+0

उत्तर adymitruk के लिए धन्यवाद, मैंने गिट 'रीसेट - हार्ड हेड^'और उस गिट पुश मूल + मास्टर के बाद कोशिश की लेकिन मुझे अभी भी संदेश के साथ एक त्रुटि मिली है![रिमोट अस्वीकार] मास्टर -> मास्टर (पूर्व-प्राप्त हुक अस्वीकार) ' –

+0

यदि आप धक्का के कारण रिमोट पर एक प्रतिबद्धता खोने जा रहे हैं, तो आपको गिट को यह बताना होगा कि यह' --force' या ' -एफ' विकल्प। उत्तर अपडेट कर रहा है। –

7

यहां समस्या यह है कि आप उन परिवर्तनों को पूर्ववत करना चाहते हैं जिन्हें आपने पहले ही केंद्रीय भंडार में धक्का दिया है। यदि आपने उन्हें पहले स्थान पर नहीं धकेल दिया था, तो एक गिट रीसेट - हार्ड/- सॉफ्ट/- मिश्रित हेड^चाल चलती।

तो जब आप अपने हेड गिट को रीसेट कर देते हैं तो जब आप मूल पर धक्का देने की कोशिश करते हैं और रिमोट रेफ अपडेट करते हैं जो आपके सिर के पूर्वजों नहीं है। जवाब के लिए

git push --force origin master 
संबंधित मुद्दे