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




version-control branch (5)

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

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

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

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


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

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


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

  • 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 अधिक स्पष्ट है।


मैं कछुए एचजी (Mercurial के लिए एक मुफ्त जीयूआई) स्थापित करेंगे और इसका उपयोग करें। फिर आप उस संशोधन पर राइट-क्लिक कर सकते हैं जिसे आप वापस लौटना चाहते हैं - अपनी आंखों के सामने सभी प्रतिबद्ध संदेशों के साथ - और 'सभी फ़ाइलों को वापस करें'। यह एक सहज फ़ाइल के संस्करणों के बीच पीछे और आगे रोल करने में सहज और आसान बनाता है, जो वास्तव में उपयोगी हो सकता है यदि आप पहली बार कोई समस्या दिखाई देने पर स्थापित करना चाहते हैं।


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

hg revert path/to/file -r-2

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


hg update [-r REV]

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





revert