2011-02-03 16 views
13

मैं संस्करण नियंत्रण के लिए TortoiseHg का उपयोग कर रहा हूं। मैंने स्थानीय लोगों के आने के बाद रिमोट रिपोजिटरी में धक्का दिया। मैं किसी विशेष प्रतिबद्धता बिंदु को पूर्ववत कैसे करूं?एक मर्कुरियल पुश को पूर्ववत करना

तीन अलग-अलग धक्का थे, और मैं पहले पुश पर वापस जाना चाहता हूं। मैंने एचजी रोलबैक और एचजी पूर्व आदेशों के बारे में पढ़ा है, लेकिन मुझे यकीन नहीं है कि इसे पूरा करने के लिए उनका उपयोग कैसे किया जाए।

+0

सूखी घास लंबी घास कि कटौती की गई है और सूखे, मवेशियों के लिए भोजन के रूप में इस्तेमाल किया है। :-) –

+1

इस लेख इसके अलावा उपयोगी है "[खोजने और फिक्सिंग गलतियों] (http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html)"। –

उत्तर

14

क्योंकि आपने किसी अन्य भंडार में धक्का दिया है, तो आपके पास यह जानने का कोई तरीका नहीं है कि आपके परिवर्तन कहां प्रचारित हुए हैं। यदि आपने धक्का नहीं दिया था, तो आप पूर्ववत कर सकते हैं, लेकिन फिर भी अंतिम लेनदेन पूर्ववत करता है।

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

यदि आपके पास केंद्रीय तक पहुंच है, तो आप इसे पट्टी कर सकते हैं, लेकिन अगर किसी और ने पहले ही आपके बदलावों को खींच लिया है, तो अगली बार जब वे धक्का देंगे तो वे केंद्र में फिर से दिखाई देंगे।

समय पर इस बिंदु पर आपका एकमात्र सुरक्षित विकल्प बैकआउट कमांड है। यह मूल रूप से टिप पर एक नया परिवर्तन बनाता है जो आपके द्वारा गलती से किए गए परिवर्तनों को उलट देता है।

2

आप hginit.com's 'fixing goofs' page पढ़ना चाहेंगे। आप "वापस", मर्ज करना और धक्का देना चाहते हैं। यह वास्तव में क्या करता है एक नई प्रतिबद्धता बनाता है जो परिवर्तनों के विपरीत करता है, और इसे लागू करता है।

14

एक "शुद्धवादी" Mercurial परिप्रेक्ष्य से, माइक सही है - धक्का परिवर्तन आपके नियंत्रण से बाहर हैं। लेकिन, प्रैक्टिस में यह अक्सर एक बहुत सख्त परिप्रेक्ष्य होता है।

माइक ने जो कहा, उसके विरोध में पहले से ही बदलावों को धक्का दिया एक विकल्प हो सकता है। यह इस बात पर निर्भर करता है कि क्या आपके पास केंद्रीय भंडार (वहां भी पट्टी करने के लिए) और आपकी टीम/समुदाय के आकार और यह कैसे व्यवस्थित किया जाता है, पर नियंत्रण है।

यदि आप निश्चित रूप से जानते हैं कि किसी ने भी आपके खराब परिवर्तनों को खींच लिया है, तो बस अपने स्थानीय और केंद्रीय रिपो-स्ट्राइक को हटा दें, इतिहास हटा दिया गया है।

यदि वहाँ एक मौका किसी को पहले से ही अपने बुरा changesets खींच लिया, आप पट्टी स्थानीय और केंद्रीय रेपो रूप में अच्छी तरह होगा और आप अपने स्थानीय रेपोस में बुरा changesets पट्टी करने के लिए सभी को आगे बढ़ाने टीम के सदस्यों को सूचित करने के लिए होगा भी (या छीन लिया केंद्रीय रिपो से पुनः प्राप्त करने के लिए)। यदि आप भाग्यशाली हैं, तो हर कोई जो करता है वह करता है। अन्यथा जल्दी या बाद में केंद्रीय रिपो में परिवर्तन समाप्त हो जाते हैं।

नीचे की रेखा यह है कि स्ट्रिपिंग आपके जैसे मामलों के लिए एक समाधान हो सकती है - आपको लागत (अतिरिक्त काम के साथ अपनी टीम को बोझ) और लाभ (स्वच्छ इतिहास) को संतुलित करना होगा।


एक व्यावहारिक उदाहरण जहां लाभ से अधिक लाभ होगा यदि आपने गलती से बड़ी बाइनरी फाइलें जोड़ दी हैं। उस स्थिति में शायद हर टीम सदस्य उड़ा हुआ भंडार के साथ काम करने के बजाय सिंक्रनाइज़ करना पड़ेगा।


अद्यतन: आप सर्वर साइड हुक का उपयोग कर सकते केंद्रीय भंडार में वापस जाने से छीन लिया changesets को रोकने के लिए - read more here

+0

आप ठीक कह रहे हैं, मैं इस पर एक बहुत ही 'puristic' रवैया अपनाया। इसे साफ करना संभव है, और आपका उदाहरण एक महान है जहां आप निश्चित रूप से प्रयास, और अनुवर्ती, निवेश करना चाहते हैं। – Mikezx6r

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