वास्तव में पहले विलय के बिना मर्ज का परीक्षण कैसे करें


167

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

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



जवाबों:


133

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

git reset --merge

1.7.4 git के बाद से, आप ऐसा करके मर्ज को समाप्त कर सकते हैं:

git merge --abort

(जैसा कि उस विकल्प को जोड़ने वाले प्रतिबद्ध संदेश बताते हैं , यह संगति के लिए जोड़ा गया था git rebase --abortऔर इसी तरह।)


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

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

2
अगर यह Git का नवीनतम संस्करण में जोड़ा गया है मैं नहीं जानता, लेकिन डॉक्स (1.8.4) यह कहा गया में " git merge --abortके बराबर है git reset --mergeजब MERGE_HEADइतना जो कुछ भी याद करने के लिए आसान है मौजूद है", :)
शमूएल Meacham

@SamuelMeacham: यह इंगित करने के लिए धन्यवाद - इसे 1.7.4 में पेश किया गया था। मैंने उसके साथ उत्तर को अपडेट कर दिया है। धन्यवाद!
मार्क लोंगेयर

इस सुझाव ने मेरे लिए कुछ नहीं किया, git 1.9.4 पर।
djangofan

138

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

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


मुझे नहीं लगता कि यह git merge --abortमौजूद है - शायद आपका मतलब है git reset --merge?
मार्क लोंगेयर

नहीं, मैं भूल गया था कि इसके विपरीत rebaseएक के --abortलिए नहीं है git merge
एम्बर

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

1
@ एंडीज --no-ffयहां बहुत अनिवार्य है, क्योंकि --no-commitयह तेजी से आगे होने वाले परिवर्तनों को रोक नहीं पाता है।
२०:५५ पर जैक

1
@ अनंत आनंद गुप्ता - यह एक अच्छी चाल है, लेकिन यह होना चाहिए: git config --global alias.tm "मर्ज - कोई-प्रतिबद्ध
-नो

109

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

git checkout master
git checkout -b trial_merge
git merge topic_branch

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

git diff master

जब किया जाता है, तो केवल परीक्षण_मर्ज शाखा हटाएं

git checkout master
git branch -D trial_merge

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


4
आप अपनी git checkout --detachइच्छानुसार कुछ भी कर सकते हैं और उसका परीक्षण भी कर सकते हैं। बाद में, यदि आप अपने परिवर्तन रखना चाहते हैं, तो करें git checkout -b new_branch। और यदि आप अपने परिवर्तनों को दूर फेंकना चाहते हैं, तो किसी भी शाखा को चेक करें जिसे आप चाहते हैं ( git checkout master)।
शायन तोकराई

यदि topic_branchबहुत बड़ा है (जैसा कि संभवतः यदि आप इस सवाल पर हैं कि पहली जगह में है) तो diff masterआउटपुट शायद आपके लिए बहुत बड़ा है अगर आप मर्ज करने जा रहे हैं तो संघर्ष हो सकता है।
क्रिसेंट फ्रेश

मुझे निश्चित रूप से यह बहुत पसंद है ... सुरक्षित और सरल।
leo

4

मैं उपयोग करता हूं :

git merge --ff-only

प्रलेखन के अनुसार :

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

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


4

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


1
ऊपर बताए गए अन्य कौन से तरीके हैं? वे सभी का उल्लेख करते हैं git merge --abort। आपको भविष्य में अपने उत्तर को यह निर्दिष्ट करके बताना चाहिए कि आप किस उत्तर का उल्लेख कर रहे हैं।
माइकल फुल्टन

3

क्यों न केवल एक भगोड़ा शाखा (git चेकआउट-बी) बनाएं, और वहां एक परीक्षण मर्ज करें?


1
आप जो सुझाव देते हैं, वह वास्तव में इयान द्वारा व्यक्त किया गया उत्तर है :)
tzot

0

मुझे नहीं पता कि क्या यह आपका मामला है , लेकिन आपका सवाल मुझे याद है कि कभी-कभी मैं एक सुविधा शुरू करता हूं, मैं दिनों के लिए प्रतिबद्ध हूं और मैं इसे कई बार विकसित करता हूं।

इस बिंदु पर मैंने अपने द्वारा परिवर्तित की गई सटीक फ़ाइलों पर नियंत्रण खो दिया है और मुझे यह तभी पता चलेगा जब मेरी सुविधा बंद हो गई थी और मेरा कोड विकसित हो गया।

इस मामले में, यह जानने का एक अच्छा तरीका है कि आपने क्या संशोधन किए (मर्जों के अलावा नहीं) सॉरसेट्री का उपयोग कर रहा है।

आपको आधार शाखा पर दाहिने बटन पर क्लिक करना होगा और चुनें Diff Against Current:

दो शाखाओं के बीच अंतर जानने के लिए सॉर्सेट्री की सुविधा

फिर सॉकरट्री आपको उन सभी संशोधनों को दिखाएगा जो विलय हो जाएंगे यदि आप अपनी शाखा को आधार शाखा में विलय कर देते हैं।

परिणाम

बेशक, यह आपको संघर्ष नहीं दिखाएगा, लेकिन यह मर्ज में एक उपयोगी उपकरण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.