2012-12-21 66 views
8

मेरे पास एक शाखा है जो लंबे समय तक विकसित की गई थी। विकास के दौरान डिफ़ॉल्ट शाखा उस शाखा में कई बार विलय कर दी गई थी। मैं अब विलय को अनदेखा कर उस शाखा में किए गए सभी परिवर्तनों की समीक्षा करना चाहता हूं, यह तय करने के लिए कि क्या इसे डिफ़ॉल्ट रूप से मर्ज करना सुरक्षित है या नहीं।Mercurial - सभी विलय को अनदेखा कर शाखा में परिवर्तन देखें

मैं

hg diff -r "branch('myBranch') - merge()"

की कोशिश की लेकिन यह अभी भी मर्ज के द्वारा शुरू की परिवर्तन दिखाता है। इसके अलावा इस How to show the diff specific to a named branch in mercurial लेकिन

hg diff -r "branch('myBranch') - branch('default')"

अभी भी मर्ज के द्वारा शुरू की परिवर्तन लाने निम्नलिखित की कोशिश की।

उत्तर

5

आप revsets के बारे में वाक्य रचना

आपका मामला पढ़ने के लिए है

hg log -r "branch('myBranch') and ! merge()"

+0

धन्यवाद @ आलसी-बेजर, लेकिन मुझे डर है कि उत्पादन 'एचजी diff -r" शाखा ('myBranch') - मर्ज() "को अलग नहीं पैदा करता हूँ' मैं अभी भी मर्ज के द्वारा शुरू की परिवर्तन देखने । बीटीडब्ल्यू का मतलब था 'एचजी diff -r "शाखा (' mybranch ') और! विलय()" ', है ना? – Swiety

+0

@ गोपनीयता 1) 'लॉग' और' diff' अलग-अलग कमांड हैं, ** पूरी तरह से अलग-अलग कमांड ** **) जब मैंने 'लॉग' लिखा - मैंने 'लॉग' लिखा, क्योंकि आपको ** परिवर्तनों की सूची ** प्राप्त करना है ** और परीक्षण में ** प्रत्येक परिवर्तन में ** ** * * * * भिन्न * से अधिक *, 'लॉग' के सेट में प्रत्येक संशोधन के लिए diff -c) में परिवर्तन 3) आरटीएफएम "औपचारिक तर्क": 'x - y'! =' x और! y' !!! ** (एक्स में परिवर्तन लेकिन वाई में नहीं)! = (एक्स में परिवर्तन और वाई में नहीं) ** - स्कूल में वापस –

+1

मेरा औपचारिक तर्क महान नहीं है, लेकिन इस उदाहरण में 'x-y' नहीं है और 'एक्स और! वाई 'एक ही परिणाम देते हैं? 'Mybranch' में कुछ भी जो एक विलय भी नहीं है? – icabod

6

अपने आदेशों के साथ समस्या यह है कि जब आप एक hg diff करते हैं और कई changesets इसे पारित, आप वास्तव में एक प्रदर्शन है उन परिवर्तनों के बीच अंतर, इसलिए आप मर्ज परिणाम देखेंगे।

तुम सिर्फ changesets द्वारा किए गए तो आप export इस्तेमाल कर सकते हैं परिवर्तन देखना चाहते हैं: संशोधन/changeset आईडी के आधार पर नाम के साथ

$ hg export -r "branch('mybranch') and not merge()" 
// lists the changes made by each changeset 

आसान समीक्षा करने के लिए उत्पादन, आप कर सकते हैं इन फ़ाइलों के लिए:

$ hg export -r "branch('mybranch') and not merge()" -o "%H.patch" 

... नाम "40 अंकों changeset id.patch" के साथ एक फ़ाइल को mybranch में प्रत्येक गैर-मर्ज changeset के लिए एक फ़ाइल, और यह outputs पैदा करता है। यदि आप संशोधन संख्या पसंद करेंगे (केवल आपके स्थानीय भंडार के लिए उपयोगी संशोधन आईडी के रूप में उपयोगी हैं), "%R.patch" का उपयोग करें।

1

निम्नलिखित log आदेश का उपयोग करता है लेकिन --patch पैरामीटर के साथ यह रूप में अच्छी तरह से संशोधित लाइनों को दिखा सकते हैं:

hg log --branch my-branch --no-merges --patch 

संक्षिप्त रूप:

hg log -Mpb my-branch 
0

एक बहुत अच्छा सवाल है, यही कारण है कि जो मैं मैं लंबे समय के लिए अच्छा जवाब खोजने की कोशिश कर रहा हूं, और फिर भी एक अच्छा नहीं मिला। ठीक है, एक बात जो 100% काम करता है यह है:

hg status  # make sure that you don't have local changes 
hg up <target_branch> 
hg merge <your branch> 
hg diff > merge.diff 
hg up -C # this one cleans the merge 

मैं यह सब समय कार्यप्रवाह उपयोग करें, लेकिन यह मेरे लिए पूरी तरह से संतुष्ट नहीं करता है क्योंकि यह शाखाओं (स्विच करने के लिए की आवश्यकता है जब मैं वास्तव में वास्तविक मर्ज करने के लिए नहीं चाहते हो सकता है इस सटीक पल में, मैं बस वहां क्या देख रहा हूं)

मैं यहां एक अच्छे समाधान के लिए उम्र खोज रहा हूं, लेकिन अब तक कोई भी नहीं मिला है।की कोशिश की उन:

hg diff -r "branch('.') and ! merge()" # this page 
hg diff -r "default:branch('.') and not merge()" 
hg diff -r "parents(branch(.)):branch('.') and not merge()" 

यह समस्या में चर्चा:

  • Mercurial: how can I see only the changes introduced by a merge? जो रूप में अच्छा जवाब है: "इसलिए यदि आप यह स्पष्ट रूप से परिभाषित कर सकते हैं आप हम में से एक को समझाने सकता मर्क्युरियल योगदानकर्ताओं कि इतने के लिए पढ़ा इसे लागू करो।"