Mercurial में स्थानीय प्रतिबद्धताओं को हटाने का कोई तरीका है?




(6)

" Mq " एक्सटेंशन सक्षम करें और निम्न टाइप करें:

hg strip #changeset#

जहां #changeset# है जिसे आप निकालना चाहते हैं। यह उस परिवर्तन से हटाए गए परिवर्तनों को हटा देगा जो उससे निकलते हैं।

अधिक जानकारी के लिए, स्ट्रिप एक्सटेंशन की जांच करें।

अगर आपको "अनकॉउन कमांड" स्ट्रिप मिलती है तो आपको इसे सक्षम करने की आवश्यकता हो सकती है। ऐसा करने के लिए .hgrc या Mercurial.ini फ़ाइल .hgrc और इसमें निम्न जोड़ें:

[extensions]
mq = 

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

strip कमांड तब उपयोगी होता है जब आप वास्तव में शाखाओं को प्रदूषित करने वाले परिवर्तनों से छुटकारा पाना चाहते हैं। वास्तव में, यदि आप इस प्रश्न की स्थिति में हैं और आप स्थायी रूप से सभी "ड्राफ्ट" परिवर्तन सेट को पूरी तरह से हटाना चाहते हैं, तो शीर्ष उत्तर देखें , जो मूल रूप से करने का सुझाव देता है:

hg strip 'roots(outgoing())'

तो मैं Mercurial में एक मूर्ख गलती बनाते रहो। अक्सर बार, मैं "एचजी पुल" और "एचजी अपडेट" किए बिना काम शुरू करूंगा। जब मैं अपने परिवर्तनों को धक्का देने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलती है।

क्या मेरे स्थानीय कामों को हटाने का कोई तरीका है, इसलिए मैं कई सिर, शाखाएं आदि बनाने से बच सकता हूं? मैं बस अपने स्थानीय कामों को हटाना चाहता हूं, टिप के साथ अपने परिवर्तनों को विलय करना चाहता हूं, और फिर पुनः प्रतिबद्ध हूं। सरल लगता है, है ना? मुझे स्थानीय कामों को आसानी से हटाने का कोई तरीका नहीं दिख रहा है, इसलिए मैं टिप के साथ साफ़ रूप से विलय कर सकता हूं।

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


आधुनिक उत्तर (Mercurial 2.1 के बाद केवल प्रासंगिक):

Phases प्रयोग करें और उन संशोधनों को चिह्नित करें जिन्हें आप गुप्त (निजी) के रूप में साझा नहीं करना चाहते हैं। इस तरह जब आप धक्का देते हैं तो वे नहीं भेजे जाएंगे।

TortoiseHG में आप अपने चरण को बदलने के लिए प्रतिबद्धता पर राइट क्लिक कर सकते हैं।

साथ ही: आप खींचने के बाद साझा स्थानीय भंडार के प्रमुख पर अपने स्थानीय काम को स्थानांतरित करने के लिए एक्सटेंशन "रीबेस" का भी उपयोग कर सकते हैं।


जैसा कि हर कोई इंगित कर रहा है कि आपको शायद खींचें और फिर सिर को मर्ज करना चाहिए, लेकिन यदि आप वास्तव में किसी भी EditingHistory बिना अपने काम से छुटकारा पाना चाहते हैं तो आप केवल hg clone -r कर सकते हैं hg clone -r इन सभी को पाने के लिए अपने रेपो ।


मैं भी इस समस्या में आया था। मैंने 2 commit किए और रोलबैक करना और दोनों कामों को हटाना चाहते थे।

$ hg rollback

लेकिन hg rollback सिर्फ अंतिम प्रतिबद्धता के लिए वापस रोल करता है, 2 काम नहीं करता है। उस समय मुझे इसका एहसास नहीं हुआ और मैंने कोड बदल दिया।

जब मैंने पाया कि hg rollback ने सिर्फ एक प्रतिबद्धता वापस ले ली है, तो मैंने पाया कि मैं hg strip #changeset# उपयोग कर सकता हूं। इसलिए, मैंने नवीनतम 10 काम खोजने के लिए hg log -l 10 का उपयोग किया और सही बदलाव प्राप्त किया जिसे मैं strip करना चाहता था।

$ hg log -l 10
changeset:   2499:81a7a8f7a5cd
branch:      component_engine
tag:         tip
user:        myname<[email protected]>
date:        Fri Aug 14 12:22:02 2015 +0800
summary:     get runs from sandbox

changeset:   2498:9e3e1de76127
branch:      component_engine
user:        other_user_name<[email protected]>
date:        Mon Aug 03 09:50:18 2015 +0800
summary:     Set current destination to a copy incoming exchange

......

$ hg strip 2499
abort: local changes found

abort: local changes found क्या होता है abort: local changes found मतलब क्या है? इसका मतलब है कि hg को उस कोड में परिवर्तन मिले जो अभी तक नहीं किए गए हैं। इसलिए, इसे हल करने के लिए, आपको जो कोड बदल दिया है उसे सहेजने के लिए आपको अलग-अलग होना चाहिए और hg revert और hg strip #changeset# । सिर्फ इस तरह:

$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#

उपर्युक्त करने के बाद, आप diff फ़ाइल को patch कर सकते हैं और आपका कोड आपके प्रोजेक्ट में वापस जोड़ा जा सकता है।

$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff

यदि आप गिट से परिचित हैं तो आपको histedit का उपयोग करने में खुशी histedit जो histedit git rebase -i जैसी काम करता है।


hg strip वह है जिसे आप ढूंढ रहे हैं। यदि आप गिट से परिचित हैं तो यह git reset के समान है।

कंसोल का प्रयोग करें:

  1. आपको संशोधन संख्या जाननी होगी। hg log -l 10 । यह आदेश पिछले 10 काम दिखाता है। वह प्रतिबद्धता ढूंढें जिसे आप ढूंढ रहे हैं। आपको changeset: 5888:ba6205914681 लाइन changeset: 5888:ba6205914681 से 4 अंकों की संख्या चाहिए changeset: 5888:ba6205914681

  2. फिर hg strip -r 5888 --keep । यह प्रतिबद्धता के रिकॉर्ड को हटा देता है लेकिन सभी फाइलों को संशोधित करता है और फिर आप उन्हें अनुशंसा कर सकते हैं। (यदि आप फ़ाइलों को हटाना चाहते हैं तो बस हटाएं - hg strip -r 5888







mercurial