version control Mercurial-पुराने संस्करण पर वापस लौटें और वहां से जारी रखें




version-control branch (6)

hg update -r REV का उपयोग करने के बाद यह उस बदलाव को स्वीकार करने के बारे में उत्तर में स्पष्ट नहीं था जिससे आप धक्का दे सकें।

यदि आप अपडेट के बाद प्रतिबद्ध करने का प्रयास करते हैं, तो Mercurial नहीं लगता कि कोई बदलाव हैं।

मुझे पहले किसी भी फाइल में बदलाव करना था (रीडमे में कहें) ताकि मर्कुरियल ने पहचाना कि मैंने एक नया बदलाव किया है, तो मैं इसे कर सकता हूं।

इसके बाद उसने दो प्रमुखों का उल्लेख किया।

धक्का देने से पहले दूसरे सिर से छुटकारा पाने के लिए, मैंने उस स्थिति को हल करने के लिए नो-ऑप विलय चरण का पालन किया।

मैं फिर धक्का देने में सक्षम था।

मैं एक प्रोजेक्ट के लिए स्थानीय रूप से Mercurial का उपयोग कर रहा हूं (यह केवल एकमात्र रेपो है जहां कहीं भी कोई धक्का नहीं है / खींच रहा है)।

आज तक यह एक रैखिक इतिहास मिला है। हालांकि, जिस चीज पर मैं काम कर रहा हूं, अब मुझे एक भयानक दृष्टिकोण है और मैं इसे शुरू करने से पहले संस्करण में वापस जाना चाहता हूं और इसे एक अलग तरीके से कार्यान्वित करना चाहता हूं।

मैं Mercurial में branch / revert / update -C आदेश के साथ थोड़ा उलझन में हूँ। असल में मैं संस्करण 38 (वर्तमान में 45 पर) पर वापस जाना चाहता हूं और मेरे अगले कामों में 38 माता-पिता के रूप में हैं और वहां से आगे बढ़ते हैं। मुझे कोई परवाह नहीं है कि संशोधन 39-45 कभी भी खो गए हैं या अपने आप की एक मृत अंत शाखा में खत्म हो गए हैं।

मुझे आदेशों के किस कमांड / सेट की आवश्यकता है?


hg update [-r REV]

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


आईएमएचओ, hg strip -r 39 इस मामले को बेहतर बनाता है।

इसके लिए एमक एक्सटेंशन सक्षम होना आवश्यक है और मार्टिन गीस्लर द्वारा अनुशंसित "क्लोनिंग रेपो विधि" जैसी ही सीमाएं हैं: यदि परिवर्तन किसी भी तरह प्रकाशित हुआ था, तो यह संभवतः कुछ समय पर आपके रेपो पर वापस आ जाएगा क्योंकि आप केवल बदल गए हैं आपका स्थानीय रेपो


मैंने प्रतिबद्धता और धक्का देने के ठीक बाद, बस एक फ़ाइल को पिछले संशोधन में वापस करने की आवश्यकता के मामले का सामना करना पड़ा। इन संशोधनों को निर्दिष्ट करने के लिए शॉर्टंड सिंटैक्स अन्य उत्तरों द्वारा कवर नहीं किया गया है, इसलिए ऐसा करने के लिए यहां आदेश दिया गया है

hg revert path/to/file -r-2

वह -2 आखिरी प्रतिबद्धता से पहले संस्करण पर वापस आ जाएगा, -1 का उपयोग करके वर्तमान में असामान्य परिवर्तनों को वापस कर देगा।


उपरोक्त उत्तर सबसे उपयोगी थे और मैंने बहुत कुछ सीखा। हालांकि, मेरी जरूरतों के लिए संक्षिप्त उत्तर है:

hg revert --all --rev ${1}

hg commit -m "Restoring branch ${1} as default"

जहां ${1} संशोधन या शाखा का नाम है। ये दो पंक्तियां वास्तव में एक बैश स्क्रिप्ट का हिस्सा हैं, लेकिन यदि आप इसे मैन्युअल रूप से करना चाहते हैं तो वे स्वयं ठीक काम करते हैं।

यह उपयोगी है अगर आपको रिलीज शाखा में हॉट फिक्स जोड़ने की ज़रूरत है, लेकिन डिफ़ॉल्ट रूप से निर्माण करने की आवश्यकता है (जब तक कि हम अपने सीआई उपकरण सही नहीं पाते हैं और शाखाओं से निर्माण करने में सक्षम होते हैं और बाद में रिलीज शाखाओं के साथ भी दूर होते हैं)।


आदेशों पर धोखा शीट यहां दी गई है:

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

  • hg revert केवल फ़ाइल सामग्री को बदलता है और अकेले काम करने वाली प्रतिलिपि अभिभावक को छोड़ देता है। जब आप तय करते हैं कि आप अपनी कामकाजी प्रतिलिपि में फ़ाइल में किए गए असामान्य परिवर्तनों को नहीं रखना चाहते हैं तो आप आम तौर पर hg revert उपयोग करते हैं।

  • hg branch एक नई नामित hg branch शुरू करती है। एक नामित शाखा के बारे में सोचें जिसे आप परिवर्तनों को असाइन करते हैं। तो यदि आप hg branch red , तो निम्नलिखित परिवर्तनों को "लाल" शाखा से संबंधित के रूप में चिह्नित किया जाएगा। यह परिवर्तनों को व्यवस्थित करने का एक अच्छा तरीका हो सकता है, खासकर जब विभिन्न लोग अलग-अलग शाखाओं पर काम करते हैं और बाद में आप देखना चाहते हैं कि एक परिवर्तन किस प्रकार से हुआ था। लेकिन आप इसे अपनी स्थिति में उपयोग नहीं करना चाहते हैं।

यदि आप hg update --rev 38 उपयोग करते हैं, तो hg update --rev 38 39-45 को मृत अंत के रूप में छोड़ा जाएगा - एक लापता सिर जिसे हम इसे कहते हैं। जब आप धक्का देते हैं तो आपको चेतावनी मिलेगी क्योंकि आप जिस रिपोजिटरी को दबाते हैं उसमें आप "एकाधिक हेड" बनायेंगे। चेतावनी तब से है जब इस तरह के सिर छोड़ने के लिए यह अपमानजनक है क्योंकि वे सुझाव देते हैं कि किसी को विलय करने की आवश्यकता है। लेकिन आपके मामले में आप आगे बढ़ सकते हैं और hg push --force क्योंकि आप वास्तव में इसे लटकाना छोड़ना चाहते हैं।

यदि आपने अभी तक कहीं भी 39-45 संशोधन को धक्का नहीं दिया है, तो आप उन्हें निजी रख सकते हैं। यह बहुत आसान है: hg clone --rev 38 foo foo-38 साथ hg clone --rev 38 foo foo-38 आपको एक नया स्थानीय क्लोन मिलेगा जिसमें केवल 38 संशोधन होगा। आप foo-38 में काम करना जारी रख सकते हैं और आपके द्वारा बनाए गए नए (अच्छे) परिवर्तनों को दबा सकते हैं। आपके पास अभी भी आपके foo क्लोन में पुराने (खराब) संशोधन होंगे। (आप क्लोन का नाम बदलने के लिए स्वतंत्र हैं, हालांकि, आप foo-bad और foo-38 को foo करने के लिए foo ।)

अंत में, आप hg revert --all --rev 38 उपयोग भी कर सकते हैं और फिर प्रतिबद्ध कर सकते हैं। यह एक संशोधन 46 बनाएगा जो संशोधित 38 के समान दिखता है। आप फिर संशोधन 46 से काम करना जारी रखेंगे। यह hg update के समान स्पष्ट तरीके से इतिहास में एक कांटा नहीं hg update , लेकिन दूसरी तरफ आप शिकायत नहीं करेंगे कई सिर होने के बारे में। अगर मैं उन लोगों के साथ सहयोग कर रहा हूं जो संशोधित 45 के आधार पर अपना स्वयं का काम कर चुके हैं तो मैं hg revert उपयोग करूंगा। अन्यथा, hg update अधिक स्पष्ट है।







revert