2011-09-20 14 views
103

विलय किए बिना विलय का परीक्षण कैसे करें git merge दो शाखाओं, वर्तमान कार्यशील शाखा और मास्टर के बीच अनुकरण करने का कोई तरीका है, लेकिन बिना किसी बदलाव किए?वास्तव में पहले

मुझे अक्सर git merge बनाने के लिए संघर्ष होता है। क्या पहले विलय अनुकरण करने का कोई तरीका है?

+2

http: // stackoverflow भी देखें।कॉम/प्रश्न/501407/is-there-a-git-merge-dry-run-option –

+1

संभावित डुप्लिकेट [क्या कोई गिट-मर्ज - ड्राय-रन विकल्प है?] (http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option) –

उत्तर

91

मुझे नहीं लगता कि जब तक आप मर्ज करने का प्रयास नहीं करेंगे तब तक क्या होगा, यह अनुकरण करने का एक तरीका है। हालांकि, अगर आप यह सुनिश्चित करते हैं कि विलय करने से पहले git status का आउटपुट खाली है, तो आगे बढ़ने और इसे आजमाने के लिए काफी सुरक्षित है।

git reset --merge 

Git 1.7.4 के बाद से, आप भी मर्ज करके गर्भपात कर सकते हैं:: यदि आप संघर्ष मिलता है, तो आप तुरंत वापस राज्य तुम्हारे साथ होने से पहले कम थे करने के लिए प्राप्त कर सकते हैं

git merge --abort 

(के रूप में the commit message that added that option explains, यह git rebase --abort और इतने पर स्थिरता के लिए जोड़ा गया था।)

+2

@ एम्बर का जवाब ठीक से जवाब दे रहा है कि 'विलय अनुकरण कैसे करें' से पूछा जा रहा है। '--no-commit' का उपयोग करना मेरी राय में बहुत आसान है – samirahmed

+8

@samirahmed: @Amber ने सवाल को और अधिक सचमुच, निश्चित रूप से उत्तर दिया, हालांकि' --no-commit' के साथ आप अभी भी इंडेक्स और काम कर रहे पेड़ को बदल रहे हैं, जो वास्तव में "कोई बदलाव किए बिना" नहीं है :) मेरा मुद्दा यह है कि जब लोग इस तरह के प्रश्न पूछते हैं, तो आम तौर पर यह इसलिए नहीं होता है कि वे यह नहीं जानते कि विलय कैसे होगा, यह मर्ज_ _ अक्सर क्योंकि वे इस बात से अवगत नहीं हैं कि राज्य में वापस आने के लिए कितना आसान है, अगर वे समस्याएं सामने आए तो पहले थे। –

+2

मुझे नहीं पता कि यह गिट के हाल के संस्करण में जोड़ा गया था, लेकिन दस्तावेज़ों में (1.8.4) यह कहता है कि "गिट मर्ज --बॉर्ट'' गिट रीसेट --मेरगे 'के बराबर है जब' MERGE_HEAD 'मौजूद है ", तो जो कुछ भी याद रखना आसान है :) –

91

आप वास्तव में प्रतिबद्ध होने से विलय को रोकने के लिए git merge --no-commit का उपयोग कर सकते हैं, और यदि आपको यह पसंद नहीं है कि विलय कैसे काम करता है, तो बस मूल सिर पर रीसेट करें।

यदि आप निश्चित रूप से विलय को अंतिम रूप देना नहीं चाहते हैं, भले ही यह एक तेज़ आगे है (और इस प्रकार परिभाषा के अनुसार कोई संघर्ष नहीं है), तो आप --no-ff भी जोड़ सकते हैं।

+0

मुझे नहीं लगता कि 'गिट मर्ज --बॉर्ट' मौजूद है - शायद आपका मतलब है' गिट रीसेट --merge'? –

+0

नहीं, मैं बस भूल गया कि 'रिबेस' के विपरीत 'गिट मर्ज' के लिए '--abort' नहीं है। – Amber

+5

मैं भी '--no-ff' पर फेंक दूंगा। होने से एक एफएफ विलय रखने के लिए। – Andy

3

मैं हाल ही में git merge --abort का उपयोग करने में सक्षम हूं। हालांकि, इसका उपयोग केवल तभी किया जा सकता है जब विलय विवाद हो। यदि आप सुनिश्चित हैं कि आप प्रतिबद्ध नहीं करना चाहते हैं, तो ऊपर उल्लिखित अन्य विधियों का उपयोग करें।

git checkout master 
git checkout -b trial_merge 
git merge topic_branch 

मर्ज पूरा करने के बाद, यह मास्टर से समेकित परिवर्तन देखने के लिए आसान है:

66

मैं मास्टर के लिए एक विषय शाखा पर परिवर्तन की तुलना करना चाहते हैं, तो मैं निम्न करने के लिए यह सबसे आसान व सुरक्षित लगता है

git diff master 

काम पूरा हो जाने के लिए, बस trial_merge शाखा को नष्ट

git checkout master 
git branch -D trial_merge 

इस तरह, मास्टर शाखा कभी नहीं बदलती है।

+0

ग्रेट विचार। धन्यवाद। – djangofan

+0

यह मेरे लिए अच्छी तरह से काम करता है! – user1176783

+0

अच्छी और सुरक्षित रणनीति, धन्यवाद! – Tol182

1

मैं का उपयोग करें:

git merge --ff-only 

अनुसार documentation रहे हैं:

विलय और एक गैर शून्य की स्थिति के साथ बाहर निकलने के लिए मना जब तक वर्तमान प्रधान पहले से ही है अप-टू-डेट या मर्ज कर सकते हैं एक तेजी से आगे के रूप में हल किया जाना चाहिए।

यह वास्तव में एक सिमुलेशन नहीं है क्योंकि दोनों शाखाओं के बीच कोई संघर्ष नहीं होने पर तेजी से आगे बढ़ने वाला होगा। लेकिन संघर्ष के मामले में, आपको सूचित किया जाएगा और कुछ भी नहीं होगा।

1

क्यों न केवल एक फेंकने वाली शाखा (गिट चेकआउट-बी) बनाएं, और वहां एक परीक्षण विलय करें?

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