2012-12-27 6 views
5

मैं अपने स्थानीय मशीन में खींचे गए कुछ बदलावों को पुन: पेश करने का प्रयास कर रहा हूं। मैं त्रुटि हो रही है:आप Mercurial के साथ एक अपरिवर्तनीय परिवर्तन कैसे रीबेज करते हैं?

abort: can't rebase immutable changeset 110e73ed65a4 
(see hg help phases for details) 

और मैं के बाद भी मैं changesets है कि मैं कर रहा हूँ rebaseing (और चरण परिवर्तन सफल हो रहा है) पर चरण बदल ही त्रुटि मिलती है। का उपयोग करते हुए:

hg phase -f -d REV 

अगर वहाँ एक रास्ता है कि मैं एक changeset के दशक में changesets के सभी बदल सकते हैं मैं वहाँ इतिहास है कि मैं याद कर रहा हूँ और अभी भी अपरिवर्तनीय है में एक changeset अगर यदि ऐसा है तो सोच रहा हूँ, और, एक आदेश के साथ उत्परिवर्तनीय इतिहास।

या, अपरिवर्तनीय परिवर्तनों के साथ भी, पुनर्जन्म को मजबूर करने का कोई तरीका है?

+0

एकाधिक परिवर्तनों को निर्दिष्ट करने के लिए http://www.selenic.com/mercurial/hg.1.html#revsets देखें, उदा। 'एचजी चरण-एफ-डी रीवा :: आरईवीबी'। ध्यान दें कि भले ही आप अपने पसंदीदा चरणों को 'बल' कर सकें, मर्कुरियल आपको कभी भी सार्वजनिक परिवर्तन करने से रोकता है जिसका पूर्वज गुप्त या मसौदा है। तो किसी भी परिस्थिति में जहां आप 'एचजी चरण-एफ-डी आरईवी' टाइप करते हैं तो दोनों 'आरईवी' और * इसके सभी पूर्वजों * कमांड दर्ज करने से पहले सार्वजनिक होना चाहिए, और कमांड केवल 'आरईवी' बदलता है। दूसरी तरफ, एक 'एचजी चरण-एफ-डी BASE_REV' सभी वंशजों को भी प्रभावित करेगा, और' एचजी रिबेस 'को काम करना चाहिए। – Ein

उत्तर

5

सार्वजनिक परिवर्तनों को रीबेज करना very bad idea माना जाता है। आपको धक्का दिया गया कोई भी इतिहास नहीं बदलना चाहिए - phases का बिंदु यह ट्रैक करना है कि अभी तक कौन से परिवर्तनों को धक्का नहीं दिया गया है (इसलिए वे संशोधित करने में सक्षम हैं), और किन परिवर्तनों को धक्का दिया गया है (इसलिए वे अपरिवर्तनीय हैं)। rebase documentation से:

You should not rebase changesets that have already been shared with others. Doing so will force everybody else to perform the same rebase or they will end up with duplicated changesets after pulling in your rebased changesets.

यह या तो अपने परिवर्तन या में उन्हें graft में विलय करने के लिए बेहतर है ग्राफ्ट (यह भी चेरी पिकिंग के रूप में जाना जाता है) अपने वर्तमान शाखा को एक या अधिक changesets और उन्हें प्रतियां ले जाता है।।

+2

मेरा अनुभव यह है कि परिवर्तनों को धक्का दिए बिना अपरिवर्तनीय माना जा सकता है। यदि आपके पास दो स्थानीय मशीनें हैं जो एक दूसरे के बीच आपके बदलाव खींचती हैं, तो उन्हें "धक्का" माना जा सकता है, भले ही वे – Arvid

+0

नहीं हैं, रीबेस '--keep' विकल्प का समर्थन करता है। इस तरह के रिबैड प्रतिबद्धताओं में भ्रष्टाचार से अलग मेटाडेटा होता है - वे अलग-अलग दिखाई देते हैं। – user2864740

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