mercurial पहले से मर्ज किए गए परिवर्तनों को बदलते हैं या एचजी पुल/पुश/मर्ज/भ्रष्टाचार के साथ जानबूझकर नजरअंदाज कर दिया है?



merge dvcs (1)

डीएजी-आधारित सिस्टम जैसे मर्क्यूरियल एंस गीट सभी या कुछ भी नहीं हैं: जब आप दो शाखाओं को मिलाते हैं, तो आप आम पूर्वज के दो-तरफा मर्ज और दो शाखाएं करते हैं।

तीन तरह से मर्ज केवल प्रत्येक शाखा के अंतिम चरण से चिंतित है। उदाहरण के लिए, यह कोई फर्क नहीं पड़ता अगर आप अपने परिवर्तनों को 10 में 1000 चरणों में करते हैं - मर्ज परिणाम समान होगा

इसका अर्थ है कि परिवर्तनों को अनदेखा करने का एकमात्र तरीका मर्ज होने से पहले इसे वापस करना है:

$ hg backout BAD

यह शाखा पर परिवर्तनों को रद्द कर देगा, ऐसा प्रतीत होता है कि यह तीन तरह से विलय के परिप्रेक्ष्य से कभी नहीं किया गया था।

अगर आपके पास पूरी शाखा है जिसमें आप मर्ज करना चाहते हैं, लेकिन अनदेखा करें, तो आप एक डमी मर्ज कर सकते हैं:

$ hg merge --tool internal:local --non-interactive
$ hg revert --all --rev .

यह मर्ज के माध्यम से चला जाता है, लेकिन इससे पहले पुराने राज्य में वापस आ जाता है।

मैं आपको सबसे अच्छी सलाह दे सकता हूं कि आपके वर्कफ़्लो को संरचित करना है ताकि उपरोक्त backouts आवश्यक न हो। इसका मतलब है कि सबसे पुराने आवेदन शाखा पर एक बगफिक्स जमा करना। यदि सुविधा एक्स बनाते समय एक बग मिल गया है, तो बग को पेश करने के दौरान पता लगाने के लिए hg bisect का उपयोग करें। अब सबसे पुरानी शाखा में वापस अपडेट किया गया है, जहां आप अभी भी बग को ठीक करना चाहते हैं:

$ hg update 2.0
# fix bug
$ hg commit -m "Fixed issue-123"

फिर बगफिक्स को बाद की सभी शाखाओं में विलय करें:

$ hg update 2.1
$ hg merge 2.0
$ hg commit -m "Merge with 2.0 to get bugfix for issue-123"

$ hg update 2.2
$ hg merge 2.1
$ hg commit -m "Merge with 2.1 to get bugfix for issue-123"

यदि बगफिक्स अब लागू नहीं होता है, तो आपको अब भी मर्ज करना चाहिए, लेकिन असंबद्ध परिवर्तनों को हटा दें:

$ hg update 3.0
$ hg merge 2.2 --tool internal:local --non-interactive
$ hg revert --all --rev .
$ hg commit -m "Dummy merge with 2.2"

यह सुनिश्चित करता है कि आप हमेशा उपयोग कर सकते हैं

$ hg log -r "::2.2 - ::3.0"

2.2 शाखा में परिवर्तनों को देखने के लिए जो अभी 3.0 में विलीन नहीं हुए हैं।

मैं सबवर्जन से चंचलता में संक्रमण कर रहा हूं, जहां मुझे पहले से ही मर्ज किए गए बदलावों को ट्रैक करने के लिए svnmerge.py का उपयोग करने के लिए उपयोग किया जाता है, या जो मर्ज किए जाने से अवरुद्ध कर दिया गया है:

# Mark change 123 as having already been merged; it will not be merged again, even if a range
# that contains it is subsequently specified.
svnmerge.py merge -M -r123
#
# Block change 326 from being considered for merges.
svnmerge.py merge -X -r326
#
# Show changes that are available for merging from the source branch.
svnmerge.py avail
#
# Do a catchall merge of the remaining changes.  Neither change 123 nor change 326 will be
# considered for merging.
svnmerge.py merge

मैं एचजी पुल / पुश / मर्ज / भ्रष्टाचार के लिए कुछ ऐसा करने में सक्षम होना चाहता हूं, ताकि अगर मुझे पता हो कि मैं कभी भी किसी बदलाव को मर्ज नहीं करना चाहता हूं, तो मैं इसे ध्यान से ब्लॉक कर सकता हूं, बाद में चेरी-पिकिंग, मर्जिंग, आदि, एक और अधिक आग और भूल चक्कर में। मैंने बहुत कुछ किया है, लेकिन ऐसा करने का कोई तरीका नहीं मिला है।

यहां तक ​​कि गैर-बेतरतीब परिवर्तनों की सूची देखने का कोई तरीका नहीं है।

जैसे-जैसे मैं अक्सर अन्य डेवलपर्स के साथ तालमेल रखता हूं और उनकी विलय के साथ उनकी मदद करता हूं, इन प्रकार की चीजों को करने में सक्षम होने के लिए बहुत उपयोगी होता है, जो कि "चेहरे को व्युत्पन्न करने में अच्छी तरह से विचार कर सकता है"; यानी, उन परिवर्तनों को चिह्नित करना जिन्हें आप मर्ज नहीं करना चाहते हैं, और फिर शेष के एक बल्क मर्ज कर रहे हैं





cherry-pick