मैं अपने मर्ज संघर्षों को हल करने के बाद मर्ज को कैसे समाप्त करूं?


282

मैंने Git कम्युनिटी बुक के बेसिक ब्रांचिंग और मर्जिंग सेक्शन को पढ़ा है ।

इसलिए मैं इसका पालन करता हूं और एक शाखा बनाता हूं experimental:।

फिर म:

  1. प्रयोगात्मक शाखा पर स्विच करें (प्रयोगात्मक जाँच करें)
  2. परिवर्तनों का एक समूह बनाएं
  3. इसे कमिट करें (git कमिट-ए)
  4. मास्टर शाखा पर स्विच करें (गिट चेकआउट मास्टर)
  5. वहां कुछ बदलाव करें और कमिट करें
  6. प्रायोगिक पर वापस जाएँ (प्रयोगात्मक जाँच करें)
  7. मर्ज मास्टर परिवर्तन प्रायोगिक (git मर्ज मास्टर)
  8. कुछ उलझनें हैं, लेकिन मैं उन्हें हल करने के बाद, मैंने 'git add myfile' किया।

  9. और अब मैं फंस गया हूं, मैं वापस मास्टर में नहीं जा सकता

जब मैं करता हूं

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

और मैंने किया:

$ git rebase --abort

प्रगति में कोई छूट नहीं?

और मैंने किया :

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

मैं क्या कर सकता हूं ताकि मैं अपनी मास्टर शाखा में वापस जा सकूं?


जब मैं संघर्ष को ठीक कर git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"लेता हूं, तो ऐड का प्रदर्शन करता हूं, और फिर कमिटमेंट के साथ प्रदर्शन करने का प्रयास करता है fatal: cannot do a partial commit during a merge.। और निश्चित रूप से, "आंशिक रूप से कमिट" जीआईटी मैन पेजों में कहीं भी प्रलेखित या चर्चा नहीं करता है । एक टूटे हुए गधे उपकरण git mergeमें तय परिणाम के बाद प्रदर्शन Please, commit your changes before you can merge....
3

2
स्पष्ट रास्तों के साथ git कमेटी को DESCRIPTION में "3" के रूप में मेन्यू में प्रलेखित किया गया है। कमिटमेंट में तर्कों के रूप में फ़ाइलों को सूचीबद्ध करके, जिस स्थिति में कमिट इंडेक्स में मंचित परिवर्तनों को अनदेखा करेगा, और इसके बजाय सूचीबद्ध फ़ाइलों की वर्तमान सामग्री (जो पहले से ही गिट के लिए जानी जानी चाहिए) को रिकॉर्ड करें; "और इसके तहत भी - -ऑनली 'विकल्प। मुझे पूरा यकीन है कि मर्ज संदेश किसी ऐसे व्यक्ति द्वारा लिखा गया था, जिसने यह मान लिया था कि आप पढ़ेंगे कि कमिट कमांड कैसे काम करता है, और उस विवरण में "आंशिक" शब्द का अर्थ पहचान सकता है, यदि पहले से ही नहीं तो कम से कम फिर से और अधिक ध्यान से। @ jww
jthill

1
तो, उस मामले का अध्ययन समझ के लिए मेरिट सावधान रीडिंग क्यों करता है, फिर, जबकि मैनपेज नहीं है? @jww
jthill

1
ठीक है, git का स्पष्ट रूप से उपयोग करने के लिए आपको पढ़ने के लिए बेहतर तैयारी की आवश्यकता है। मैं शायद इससे भी ज्यादा अनिश्चित हूं कि यह सुनिश्चित करने में कोई गलती है कि आप क्या कर रहे हैं।
jthill

1
Git 2.12 (क्यू 1 2017) के साथ, आप जल्द ही बस एक करना होगा git merge --continue। देखें नीचे मेरा उत्तर
VonC

जवाबों:


267

जब मर्ज के दौरान कोई विरोध होता है, तो आपको मर्ज कमिट को मैन्युअल रूप से समाप्त करना होगा। ऐसा लगता है कि आपने पहले दो चरणों को किया है, जो फ़ाइलों को संपादित करने के लिए और फिर git addउन्हें हल करने के लिए उन पर चलाने के लिए। अंत में, आपको वास्तव में मर्ज करने की आवश्यकता है git commit। उस बिंदु पर आप फिर से शाखाओं को स्विच करने में सक्षम होंगे।


यदि आप कमिट करने के लिए "git gui &" का उपयोग करते हैं - तो आप महसूस नहीं कर सकते कि आपकी शाखा स्थिति "विलय" नहीं है। आपकी शाखा स्थिति सही है यह सुनिश्चित करने के लिए "गिट की स्थिति" के साथ पालन करना सहायक है।
टोनी एशवर्थ

4
git commit -am "your commit message"एक साथ जोड़ने और प्रतिबद्ध करने के लिए प्रयास करें ।
vaheeds

3
git commitकाम करेगा। और यह आपके लिए डिफ़ॉल्ट मर्ज कमिटेड मैसेज पाने के लिए इसका उपयोग करना सबसे अच्छा है। मैं `गिट कमिटम 'से बचता हूं क्योंकि यह संदेश को खत्म कर देगा
एरजून

1
कोशिश करो git push
alper

मुझे यह स्थिति नीचे के परिदृश्य में मिली -> मैंने एक्स शाखा को वाई शाखा में मिला दिया। तब मुझे एहसास हुआ कि मैंने शाखा वाई में कुछ गलत किया है, इसलिए मैंने यह तय किया और फिर मैंने वाई शाखा में अपने परिवर्तनों को "संशोधित" किया। संशोधन के कारण git ने नई प्रतिबद्धता नहीं बनाई। इसलिए जब मैंने एक्स ब्रांच को अपडेटेड वाई ब्रांच के साथ मर्ज किया, तो इसने संघर्ष दिया। इस उत्तर के लिए BTW धन्यवाद।
डोगा

157

मैं अपने मर्ज संघर्षों को हल करने के बाद मर्ज को कैसे समाप्त करूं?

Git 2.12 (Q1 2017) के साथ, आपके पास अधिक प्राकृतिक कमांड होगी:

git merge --continue

जेफ किंग ( ) द्वारा प्रतिबद्ध c7d227d (15 दिसंबर 2016) देखें । क्रिस पैखाम () द्वारा देखें 042e290 , प्रतिबद्ध c261a87 , 367ff69 (14 दिसंबर 2016 )( जूनियो सी हमानो द्वारा विलय - - में ०५ एफ ६ ईबी , २) दिसंबर २०१६)peff
cpackham
gitster

2.12 जारी नोट देखें ।

merge: ' --continue' विकल्प को ' git commit' के पर्याय के रूप में जोड़ें

' git merge' --continueविकल्प को सिखाएं जो इसे पूरा करके 'मर्ज' को जारी रखने की अनुमति देता है।
संघर्षों को हल करने के बाद मर्ज को पूरा करने का पारंपरिक तरीका ' git commit' का उपयोग करना है ।
अब ' git rebase' और ' git cherry-pick' जैसी आज्ञाओं के साथ ' ' --continueविकल्प को ' git merge' में इस तरह का विकल्प जोड़ने से संगत UI प्रस्तुत होता है।


मैं इस बारे में एक टिप्पणी तैयार कर रहा था कि यह हाल ही में Q1 2017 में 2.12 में कैसे जोड़ा गया था, लेकिन फिर मैंने आपके उत्तर की पहली पंक्ति को फिर से लिखा। कोई आश्चर्य नहीं कि संस्करण 2.10 पर मेरे लिए विकल्प नहीं मिला!
cjsimon

1
मैंने git मर्ज की कोशिश की - कॉन्टिन्यू और Git बैश को कमांड के रूप में पहचानने में सक्षम नहीं था। लेकिन क्या काम किया गया था कमिट-मी "कमिट मैसेज"
मिमी

2
@ मिमी ठीक है, लेकिन क्या आप 2.12 या अधिक का उपयोग कर रहे हैं?
वॉनसी

@ आप सही हैं, मैं Git के पुराने संस्करण का उपयोग कर रहा हूँ!
मिमी

23

यदि आप कभी भी मर्ज / रिबेस के दौरान फंस जाते हैं तो आप हमेशा सकते हैं

git reset --hard

अंतिम प्रतिबद्ध की स्थिति के लिए अपने काम को बहाल करने के लिए। यह कार्यशील पेड़ से आपके परिवर्तनों को खो देगा इसलिए यदि आपके पास मर्ज से पहले स्थानीय संशोधन थे, तो वे इसके बाद चले जाएंगे - यही कारण है कि जब आपके पास स्थानीय संशोधन होते हैं तो मर्ज शुरू न करना उचित है। :)


16
अनिवार्य चेतावनी: git reset --hardअनियंत्रित परिवर्तन को दूर फेंकता है
ज्योफ्री हेल

2
क्यों नहीं git merge --abort, जिसमें कुछ खोने का कोई जोखिम नहीं है?
अलेक्जेंडर जॉर्ज

11

बस git commitयह।

वैकल्पिक रूप से git abortयह:
मैं एक मर्ज संघर्ष में भाग गया। मैं मर्ज को कैसे समाप्त कर सकता हूं?

मर्ज पर जीवन को आसान बनाने के लिए kdiff3 स्थापित करें और इसे मर्जटूल के रूप में कॉन्फ़िगर करें। निर्देश: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-the-command-line.t

उस पेज में यह वीडियो है: https://www.youtube.com/watch?v=Cc4xPp7Iuzo


11

जब भी आप कमांड का उपयोग करते हुए दो शाखाओं का विलय करते git merge brancha branchbहैं, तो दो संभावनाएँ होती हैं:

  1. एक शाखा (शाखा कहते हैं) को दूसरे शाखा तक पहुँचाया जा सकता है (शाखा कहती है) इसके इतिहास का अनुसरण करते हुए। इस मामले में केवल तेजी से आगे की शाखा को (इस मामले में शाखा को) इंगित करने के लिए तेजी से आगे बढ़ें।

    2. लेकिन अगर दोनों शाखाओं को किसी पुराने बिंदु पर मोड़ दिया गया है, तो गिट एक नया स्नैपशॉट बनाता है और एक नई प्रतिबद्धता जोड़ता है जो इसे इंगित करता है। इसलिए यदि आप विलय कर रहे हैं, तो शाखाओं के बीच कोई संघर्ष नहीं है, सुगमता से एक नई प्रतिबद्धता का निर्माण होता है।

git logदो गैर-परस्पर विरोधी शाखाओं को मर्ज करने के बाद कमिट देखने के लिए चलाएँ ।

अब दिलचस्प मामले में वापस आ रहे हैं जब विलय की शाखाओं के बीच विलय संघर्ष हैं। मैं इसे पेज से उद्धृत करता हूं https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

Git ने स्वचालित रूप से एक नया मर्ज कमिट नहीं बनाया है। इस प्रक्रिया को रोक दिया है जब आप संघर्ष को हल करते हैं। यदि आप यह देखना चाहते हैं कि मर्ज संघर्ष के बाद किसी भी बिंदु पर कौन सी फाइलें अनमैरिड हैं, तो आप चला सकते हैंgit status


अतः यदि मर्ज की उलझनें हैं, तो आपको संघर्ष को हल करने की आवश्यकता है, फिर उपयोग करने के लिए आपके द्वारा किए गए परिवर्तनों को स्टेजिंग क्षेत्र में जोड़ें git add filenameऔर फिर उस कमांड का उपयोग करके परिवर्तन करें git commit जो संघर्ष के कारण रोक दिया गया था। आशा है कि यह आपके बारे में बताता है। क्वेरी। इसके अलावा विस्तृत समझ के लिए ऊपर दिए गए लिंक पर जाएं। किसी भी प्रश्न के नीचे टिप्पणी करने की स्थिति में, मुझे मदद करने में खुशी होगी।


7

मैन्युअल रूप से संघर्षों को हल करने के बाद अगले चरण हैं: -

  1. जोड़ देना।
  2. git स्टेटस (यह आपको दिखाएगा कि स्वचालित मर्ज प्रक्रिया को जारी रखने के लिए कौन सी कमांड आवश्यक हैं)
  3. [कमांड git सुझाव देता है, उदाहरण git merge --continueके लिए git cherry-pick --continue, git rebase --continue]

16
कोई मर्ज मर्ज नहीं है
होला

@HolaSoyEduFelizNavidad यह गलत है। संघर्ष के बाद error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
ज़ी

5
रिबेज
होला

git merge --continue, जो मैं करने की कोशिश कर रहा हूँ, में परिणाम है error: unknown option 'continue'। मैं परी हूं कि आपका जवाब गलत है क्योंकि git-mergeमैन पेज इसे सूचीबद्ध नहीं करता है। आप किस संस्करण का उपयोग कर रहे हैं? मैं उपयोग कर रहा हूं git version 1.8.5.2 (Apple Git-48)। मैंने MacPorts के साथ भी कोशिश की git version 2.9.3
jww

1
एक साधारण मर्ज के लिए git 2.10 के साथ कमांड सादी पुरानी हैgit commit
क्रिस चारबरुक

2

एक मर्ज संघर्ष तब होता है जब आप दो शाखाओं को मर्ज करने की कोशिश कर रहे होते हैं, दोनों एक ही फ़ाइल के एक ही हिस्से को बदल देते हैं। आप के साथ संघर्ष की एक सूची उत्पन्न कर सकते हैं git status

जब विवादित रेखा का सामना किया जाता है, तो गिट प्रभावित फाइलों की सामग्री को दृश्य संकेतकों के साथ संपादित करेगा जो परस्पर विरोधी सामग्री के दोनों किनारों को चिह्नित करते हैं।

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

जब आप अपने विरोध हुआ फ़ाइलों को ठीक करने और आप मर्ज के लिए तैयार हैं, तुम सब करने की ज़रूरत चलाया जाता है git addऔर git commitउत्पन्न करने के लिए मर्ज करते हैं। एक बार कमिटमेंट हो जाने के बाद, git pushब्रांच में बदलाव।

संदर्भ लेख: Git मर्ज


2

सभी फ़ाइलों को जोड़ दिए जाने के बाद, अगला चरण " गिट कमिट " है " है।

"git स्टेटस" यह सुझाव देगा कि क्या करना है: अभी तक जोडने वाली फाइलें नीचे सूचीबद्ध हैं, और एक बार जब वे सभी हो जाएंगे, तो यह शीर्ष पर एक कमिट का सुझाव देगा, जहां यह वर्तमान शाखा की मर्ज स्थिति की व्याख्या करता है।


1

पहली बात जो मैं स्पष्ट करना चाहता हूं, वह यह है कि शाखा के नाम एक विशिष्ट प्रतिबद्धता के लिए केवल एक अन्य नाम हैं। एक कमिट वह है जो काम करता है, जब आप खींचते हैं, तो मर्ज को आगे बढ़ाते हैं। प्रत्येक कमेटी की एक विशिष्ट आईडी होती है।

जब आप $ git मर्ज करते हैं, तो वास्तव में क्या हो रहा है, git अपनी शाखा को आगे भेजने की कोशिश करता है ताकि संदर्भित शाखा प्रतिबद्ध हो (दूसरे शब्दों में दोनों शाखा नाम एक ही वचन की ओर इशारा करते हैं।) यह परिदृश्य git के लिए सबसे आसान है। सौदा करने के लिए, क्योंकि कोई नई प्रतिबद्धता नहीं है। लिलिपैड पर कूदने वाले मास्टर के बारे में सोचें कि आपकी शाखा चिल कर रही है। यह संभव नहीं है - कोई भी ff ध्वज सेट करने के लिए, जिस स्थिति में git कोई भी नया विवाद पैदा करेगा चाहे कोई भी कोड संघर्ष हो।

ऐसी स्थिति में जहां दो शाखाओं के बीच आपस में विलय करने की कोशिश कर रहे हैं (आमतौर पर दो शाखाएं जिनकी प्रतिबद्ध इतिहास अतीत में एक आम प्रतिबद्धता साझा करता है), तेजी से आगे काम नहीं करेगा। git अभी भी स्वचालित रूप से फ़ाइलों को मर्ज करने में सक्षम हो सकता है, इसलिए जब तक कि एक ही पंक्ति एक परस्पर विरोधी फ़ाइल में दोनों शाखाओं द्वारा बदल नहीं दी गई थी। इस स्थिति में, git आपके लिए परस्पर विरोधी फ़ाइलों को मर्ज कर देगा और स्वचालित रूप से उन्हें प्रतिबद्ध कर देगा। आप प्रीव्यू कर सकते हैं कि git ने $ git को कैसे अलग किया - अलग किया। या आप -no-प्रतिबद्ध ध्वज को मर्ज कमांड में पास कर सकते हैं, जो आपके सूचकांक में संशोधित फ़ाइलों को छोड़ देगा जिसे आपको जोड़ना और प्रतिबद्ध करना होगा। लेकिन आप $ git को इन फ़ाइलों को अलग करने के लिए समीक्षा कर सकते हैं कि मर्ज क्या बदलेगा।

तीसरा परिदृश्य यह है कि जब टकराव होता है तो गिट स्वतः हल नहीं हो सकता। इस मामले में आपको उन्हें मैन्युअल रूप से मर्ज करने की आवश्यकता होगी। मेरी राय में यह एक मर्ज के साथ करना सबसे आसान है, जैसे कि अरैक्सिस मर्ज या पी 4 मर्ज (फ्री)। किसी भी तरह से, आपको प्रत्येक फ़ाइल को एक-एक करके करना होगा। यदि मर्ज कभी अटका हुआ लगता है, तो इसे कुतरने के लिए $ git मर्ज - कॉन्टिन्यू का उपयोग करें। Git आपको बताना चाहिए कि क्या यह जारी नहीं रह सकता है, और यदि ऐसा है तो क्यों नहीं। यदि आपको लगता है कि आप किसी बिंदु पर मर्ज को कम कर रहे हैं, तो आप $ git मर्ज --abort कर सकते हैं, और कोई भी मर्ज पूर्ववत कर देगा और आप शुरू कर सकते हैं। जब आप कर लें, तो आपके द्वारा मिलाई गई प्रत्येक फ़ाइल एक संशोधित फ़ाइल होगी जिसे जोड़ने और प्रतिबद्ध करने की आवश्यकता है। आप यह सत्यापित कर सकते हैं कि फ़ाइलें $ git स्थिति के साथ कहाँ हैं। यदि आपने अभी तक मर्ज की गई फ़ाइलों को कमिट नहीं किया है। मर्ज को पूरा करने के लिए आपको ऐसा करने की आवश्यकता है।


0

देर हो सकती है। यह हैपन है क्योंकि आपका git HEAD अपडेट नहीं है। यह सराहनीय समाधान होगा git reset HEAD

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