2011-03-15 15 views
10

को वापस लेना मुझे दो शाखाओं - मास्टर और देव के साथ एक रेपो मिला है। मैं मास्टर शाखा पर काम कर रहा था और खींच लिया, और एक संदेश मिला कि रेपो अद्यतित था। मैंने अपने परिवर्तन किए, और रिमोट रेपो (गीथूब पर) पर धक्का दिया। मुझे एक संदेश मिला कि कुछ बदलाव अस्वीकार कर दिए गए थे।पुशड गिट प्रतिबद्ध

मैंने फिर git pull origin dev किया, जो स्पष्ट रूप से करने के लिए गलत काम था - चूंकि यह मेरे गुरु के साथ देव शाखा विलय कर रहा था, और बेवकूफ की तरह मैंने इसे तब तक नहीं देखा जब तक कि मैं पहले से ही धक्का नहीं दूंगा। तो अंतिम प्रतिबद्धता Merge branch 'dev' of github.com:myuser/myrepo दिखाती है।

मैं git reset --hard [sha] कर अपने स्थानीय रेपो पर अंतिम ज्ञात अच्छी स्थिति पर वापस जा सकता हूं, [sha] विलय से पहले प्रतिबद्ध होने के साथ (हालांकि मुझे यकीन नहीं है कि मूल में उस परिवर्तन को कैसे करें) - या जो मैंने पढ़ा है उससे मैं git revert -m भी कर सकता हूं और फिर उस परिवर्तन को प्रतिबद्ध/धक्का दे सकता हूं।

क्या कोई मुझे मेरे विलय को पूर्ववत करने के लिए "सही तरीके से" चल सकता है, और दोनों शाखाओं को वापस विलय से पहले कहां बहाल कर सकता है?

धन्यवाद - यदि यह महत्वपूर्ण है तो यह केवल दो डेवलपर्स के साथ एक साझा रेपो है, इसलिए यह भारी परिवर्तनों में नहीं है।

जोड़ने के लिए संपादित करें: कृपया मुझसे बात करें जैसे कि मैं एक बच्चा था। मुझे यह गिट सामान स्वीकार करना है अभी भी मुझे भ्रमित कर रहा है, इसलिए मैं एक बिजली उपयोगकर्ता से बहुत दूर हूं! धन्यवाद

उत्तर

20

git reset --hard [sha] आपकी स्थानीय भंडार पर शाखा को सही करेगा। इस पुश को काम करने के लिए मजबूर करने के लिए, आप git push origin +master:master कर सकते हैं। + चिह्न गैर-रैखिक धक्का को काम करने के लिए मजबूर करेगा।

अन्य डेवलपर्स पहले से ही खींच लिया है आप गलत प्रतिबद्ध हैं, वे एक git remote update करने के लिए है, तो एक git reset --hard origin/master (बशर्ते कि वे अपने गुरु शाखा पर कर रहे हैं, और किसी भी अन्य प्रतिबद्ध नहीं किया होगा।

का उपयोग करें कुछ आदेशों के साथ ये आदेश :-)। सौभाग्य।

+0

जोखिम भरा लेकिन अगर केवल दो डेवलपर्स हैं, तो मुझे लगता है कि यह ठीक है। अगर आप गड़बड़ करते हैं तो ऐसा करने से पहले अपने रेपो की कम से कम एक प्रति बैकअप लेना समझदारी हो सकती है। –

+0

गिट पुश मूल मास्टर-एफ –

+0

धन्यवाद felipefg - ऐसा लगता है कि यह पूरी तरह से काम करता है! मैं स्पष्ट उत्तर की सराहना करता हूं। – julio

2

फ़ेलिपएफजी का उत्तर दो डेवलपर संदर्भ में ठीक काम करता है जहां आप आसानी से दूसरे व्यक्ति के स्थानीय भंडार को फिर से समन्वयित कर सकते हैं, लेकिन आप वास्तव में git revert -m<parent id of mainline branch, 1 in this case> <commit ref> का उपयोग बंद कर सकते हैं। फिर, जब आप इसे ठीक कर लेंगे, तो बस git revert <revert commit>, और git merge dev (इस मामले के लिए अपने पीछे हटाना महत्वपूर्ण है, क्योंकि अन्यथा git merge dev आपके पुराने विलय को पूर्वजों पर विचार नहीं करेगा, और यह उन संघर्षों का कारण बन जाएगा जिन्हें हल करना होगा) ।

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

विवरण के लिए http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt देखें।

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