Mercurial: आखिरी प्रतिबद्ध में संशोधन कैसे करें?




commit amend (4)

मैं git commit --amend का एक हिस्सा तलाश रहा हूं - Mercurial में प्रस्तुत करें, यानी मेरी कार्यशील प्रतिलिपि से जुड़ी प्रतिबद्धता को संशोधित करने का एक तरीका। इस संशोधन प्रक्रिया के लिए आवश्यकताएं हैं:

  • यदि संभव हो, तो इसे किसी भी एक्सटेंशन की आवश्यकता नहीं होनी चाहिए। इसे गैर-डिफ़ॉल्ट एक्सटेंशन की आवश्यकता नहीं होनी चाहिए, यानी एक्सटेंशन जो आधिकारिक Mercurial स्थापना के साथ नहीं आते हैं।

  • यदि संशोधन करने की प्रतिबद्धता मेरी वर्तमान शाखा का एक प्रमुख है, तो कोई नया सिर नहीं बनाया जाना चाहिए। यदि प्रतिबद्धता सिर नहीं है, तो एक नया सिर बनाया जा सकता है।

  • प्रक्रिया इस तरह से सुरक्षित होनी चाहिए कि यदि संशोधन के असफल होने के किसी भी कारण से, मैं वही काम करने वाली प्रति और भंडार राज्य को संशोधित करने से पहले बहाल करना चाहता हूं। दूसरे शब्दों के साथ, यदि संशोधन स्वयं विफल हो सकता है, तो कार्यशील प्रति और भंडार स्थिति को पुनर्स्थापित करने के लिए एक असफल-सुरक्षित प्रक्रिया होनी चाहिए। मैं "असफलताओं" का जिक्र कर रहा हूं जो संशोधित प्रक्रिया (जैसे कि विवाद) की प्रकृति में झूठ बोल रहा है, फाइल-सिस्टम से संबंधित समस्याओं के लिए नहीं (जैसे पहुंच प्रतिबंध, लेखन के लिए फ़ाइल को लॉक करने में सक्षम नहीं है ... )

अद्यतन (1):

  • प्रक्रिया स्वचालित होनी चाहिए, इसलिए इसे बिना किसी उपयोगकर्ता इंटरैक्शन के जीयूआई क्लाइंट द्वारा किया जा सकता है।

अद्यतन (2):

  • कार्यशील निर्देशिका में फ़ाइलों को स्पर्श नहीं किया जाना चाहिए (कुछ संशोधित फ़ाइलों पर फ़ाइल सिस्टम ताले हो सकते हैं)। इसका विशेष अर्थ यह है कि किसी संभावित दृष्टिकोण को किसी भी समय काम करने वाली निर्देशिका की आवश्यकता नहीं हो सकती है।

hg commit --amend लिए जीयूआई समकक्ष hg commit --amend :

यह टोर्टोइज एचजी के जीयूआई से भी काम करता है (मैं v2.5 का उपयोग कर रहा हूं):

'Commit' दृश्य में स्विच करें या, वर्कबेंच दृश्य में, 'कार्यशील निर्देशिका' प्रविष्टि का चयन करें। 'Commit' बटन में 'वर्तमान संशोधन संशोधित करें' नामक एक विकल्प है (इसे खोजने के लिए बटन के ड्रॉप-डाउन तीर पर क्लिक करें)।

          ||
          ||
          \/

चेतावनी emptor :

यह अतिरिक्त विकल्प केवल तभी सक्षम होगा यदि Mercurial संस्करण कम से कम 2.2.0 है, और यदि वर्तमान संशोधन सार्वजनिक नहीं है, तो पैच नहीं है और इसमें कोई बच्चा नहीं है। [...]

बटन पर क्लिक करने से संशोधन 'संशोधन' करने के लिए 'प्रतिबद्ध --amend' को कॉल किया जाएगा।

THG dev चैनल पर इसके बारे में अधिक जानकारी


Mercurial के हाल के संस्करणों में evolve विस्तार शामिल है जो hg amend आदेश प्रदान करता है। यह आपके संस्करण नियंत्रण में पूर्व-संशोधन इतिहास खोए बिना प्रतिबद्धता में संशोधन करने की अनुमति देता है।

एचजी संशोधन [विकल्प] ... [फ़ाइल] ...

उपनाम: ताज़ा करें

अद्यतनों के साथ एक परिवर्तन को गठबंधन करें और इसे एक नए से प्रतिस्थापित करें

Commits a new changeset incorporating both the changes to the given files
and all the changes from the current parent changeset into the repository.

See 'hg commit' for details about committing changes.

If you don't specify -m, the parent's message will be reused.

Behind the scenes, Mercurial first commits the update as a regular child
of the current parent. Then it creates a new commit on the parent's
parents with the updated contents. Then it changes the working copy parent
to this new combined changeset. Finally, the old changeset and its update
are hidden from 'hg log' (unless you use --hidden with log).

evolve विस्तार के पूर्ण विवरण के लिए https://www.mercurial-scm.org/doc/evolution/user-guide.html#example-3-amend-a-changeset-with-evolve देखें।


मैं krtek लिखा है में ट्यूनिंग कर रहा हूँ। अधिक विशेष रूप से समाधान 1:

मान्यताओं:

  • आपने एक (!) परिवर्तन किया है लेकिन अभी तक इसे धक्का नहीं दिया है
  • आप इस परिवर्तन को संशोधित करना चाहते हैं (उदाहरण के लिए फ़ाइलों को जोड़ें, हटाएं या बदलें और / या प्रतिबद्ध संदेश)

उपाय:

  • अंतिम प्रतिबद्धता पूर्ववत करने के लिए hg rollback का उपयोग करें
  • जगह में नए बदलावों के साथ फिर से प्रतिबद्ध करें

रोलबैक वास्तव में अंतिम ऑपरेशन को कम करता है। काम करने का इसका तरीका काफी सरल है: एचजी में सामान्य संचालन केवल फाइलों में शामिल होगा; इसमें एक प्रतिबद्धता शामिल है। Mercurial अंतिम लेनदेन की फ़ाइल लंबाई का ट्रैक रखता है और इसलिए फाइलों को अपनी पुरानी लंबाई में वापस खींचकर एक कदम को पूरी तरह से पूर्ववत कर सकता है।


यह मानते हुए कि आपने अभी तक अपने परिवर्तनों का प्रचार नहीं किया है, वही है जो आप कर सकते हैं।

  • अपने .hgrc में जोड़ें:

    [extensions]
    mq =
    
  • आपके भंडार में:

    hg qimport -r0:tip
    hg qpop -a
    

    बेशक आपको केवल एक पॉप ( hg qpop ) पर्याप्तता के लिए संशोधन शून्य के साथ शुरू करने या सभी पैच पॉप करने की आवश्यकता नहीं है (नीचे देखें)।

  • .hg/patches/series फ़ाइल में अंतिम प्रविष्टि को .hg/patches/series , या पैच जिन्हें आप पसंद नहीं करते हैं। पुनरावृत्ति भी संभव है।

  • hg qpush -a; hg qfinish -a
  • .diff फ़ाइलों को हटाएं (अनुपयुक्त पैच) अभी भी .hg / पैच में (आपके मामले में एक होना चाहिए)।

यदि आप अपने सभी पैच को वापस नहीं लेना चाहते हैं , तो आप इसे hg qimport -r0:tip (या समान) का उपयोग करके संपादित कर सकते हैं, फिर सामान संपादित कर सकते हैं और अपने स्टैक पर शीर्षतम पैच में परिवर्तनों को मर्ज करने के लिए hg qrefresh का उपयोग कर सकते हैं। hg help qrefresh पढ़ें।

.hg/patches/series संपादित करके, आप कई पैच भी हटा सकते हैं, या कुछ को पुन: व्यवस्थित कर सकते हैं। यदि आपका अंतिम संशोधन 99 है, तो आप केवल hg qimport -r98:tip; hg qpop; [edit series file]; hg qpush -a; hg qfinish -a उपयोग कर सकते हैं hg qimport -r98:tip; hg qpop; [edit series file]; hg qpush -a; hg qfinish -a hg qimport -r98:tip; hg qpop; [edit series file]; hg qpush -a; hg qfinish -a hg qimport -r98:tip; hg qpop; [edit series file]; hg qpush -a; hg qfinish -a

बेशक, यह प्रक्रिया अत्यधिक निराश और जोखिम भरा है । ऐसा करने से पहले सब कुछ का बैकअप लें !

एक sidenote के रूप में, मैंने निजी-केवल भंडारों पर इसे कई बार किया है।






mercurial-commit