git rebase मर्ज संघर्ष


93

मैंने एक गितुब रेपो को मांगा और अपने गितुब रेपो पर काम किया।
मैंने पुल-अनुरोध किए हैं और यह पूरा हो गया है।

उसके बाद अपस्ट्रीम ने कुछ और कमिट किया था इसलिए अब मैं रिबेट करना चाहता हूं, मुझे लगता है कि मुझे क्या करना है।
लेकिन मुझे इन मर्जों का सामना करना पड़ रहा है:

First, rewinding head to replay your work on top of it...
Applying: Issue 135 homepage refresh
Using index info to reconstruct a base tree...
<stdin>:17: trailing whitespace.
      %h4 
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/views/layouts/application.html.haml
CONFLICT (content): Merge conflict in app/views/layouts/application.html.haml
Auto-merging app/views/home/index.html.haml
CONFLICT (content): Merge conflict in app/views/home/index.html.haml
Auto-merging app/views/home/_group_projects.html.haml
CONFLICT (content): Merge conflict in app/views/home/_group_projects.html.haml
Failed to merge in the changes.
Patch failed at 0001 Issue 135 homepage refresh

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

मुझे नहीं पता कि इन्हें कैसे ठीक करना है, कृपया मदद करें।


इस पोस्ट में मेरे जवाब पर एक नज़र डालें: stackoverflow.com/questions/48307297/…
अभिषेक

जवाबों:


125

रिबासिंग एक वास्तविक सिरदर्द हो सकता है। आपको मर्ज संघर्षों को हल करना होगा और रिबासिंग जारी रखना होगा। उदाहरण के लिए आप मर्ज टूल का उपयोग कर सकते हैं (जो आपकी सेटिंग के आधार पर भिन्न होता है)

git mergetool

फिर अपने बदलाव जोड़ें और आगे बढ़ें

git rebase --continue

सौभाग्य


2
हाँ रिबासिंग सिरदर्द है, क्या मैं गिट्टी अपस्ट्रीम मास्टर का उपयोग कर सकता हूं?
पहरिन

2
हाँ आप यह कोशिश कर सकते हैं। अंतर यह है कि आपके कमिट्स को ऊपर की तरफ से उन लोगों के ऊपर नहीं डाला जाता है। संभावित रूप से कम मर्ज संघर्ष हैं।
१ilt:४४ बजे iltempo

7
@iitempo आपको एक कमिट करने की आवश्यकता नहीं है। रिबेट को जारी रखने के लिए बस एक गिट ऐड पर्याप्त है।
enigmaticPhysicist

47

जब आपके पास रिबास के दौरान संघर्ष होता है तो आपके पास तीन विकल्प होते हैं:

  • आप git rebase --abortपूरी तरह से रिबास को पूर्ववत करने के लिए चला सकते हैं । Git रिबास कहे जाने से पहले Git आपको आपकी शाखा की स्थिति में लौटा देगा।

  • आप git rebase --skipपूरी तरह से कमिट छोड़ने के लिए दौड़ सकते हैं। इसका मतलब है कि समस्याग्रस्त प्रतिबद्ध द्वारा शुरू किए गए परिवर्तनों में से कोई भी शामिल नहीं होगा। यह बहुत दुर्लभ है कि आप इस विकल्प को चुनेंगे।

  • आप संघर्ष को ठीक कर सकते हैं जैसे कि iltempo ने कहा। जब आप समाप्त कर लें, तो आपको कॉल करना होगा git rebase --continue। मेरा मेरिजूल kdiff3 है, लेकिन कई और भी हैं जिनका उपयोग आप संघर्षों को हल करने के लिए कर सकते हैं। आपको केवल अपने मर्ज टूल को git की सेटिंग में सेट करने की आवश्यकता है ताकि जब आप https://git-scm.com/docs/git-mergetool पर कॉल करें तो इसे लागू किया जा सकेgit mergetool

यदि उपरोक्त में से कोई भी आपके लिए काम नहीं करता है, तो टहलने जाएं और फिर से कोशिश करें :)


2
हां, लेकिन टकराव को कैसे ठीक किया जाए? यह सवाल है। क्या "संघर्ष को ठीक करें" और "जब आप समाप्त हो जाते हैं" के बीच है
कांसईरोबोट

के लिए रंग-पाठ संपादक में विरोध हुआ फ़ाइल को खोलने, और: @KansaiRobot एक विकल्प के मैनुअल ठीक पूरा करने के लिए<<<<<
spinup

18

यदि आपके पास रिबेट करने के लिए बहुत सारे हैं, और उनमें से कुछ हिस्सा संघर्ष दे रहे हैं, तो यह वास्तव में दर्द होता है। लेकिन मैं एक कम-ज्ञात दृष्टिकोण का सुझाव दे सकता हूं कि "सभी संघर्षों को कैसे स्क्वाश करें"।

सबसे पहले, चेकआउट अस्थायी शाखा और मानक मर्ज शुरू करें

git checkout -b temp
git merge origin/master

आपको संघर्षों को हल करना होगा, लेकिन केवल एक बार और केवल वास्तविक। फिर सभी फ़ाइलों को चरणबद्ध करें और मर्ज समाप्त करें।

git commit -m "Merge branch 'origin/master' into 'temp'"

फिर अपनी शाखा पर वापस लौटें (इसे अल्फा बनाएं) और रिबास शुरू करें, लेकिन किसी भी टकराव को हल करने के साथ स्वचालित।

git checkout alpha
git rebase origin/master -X theirs

शाखा को छूट दी गई है, लेकिन परियोजना संभवतः अमान्य स्थिति में है। यह ठीक है, हमारे पास एक अंतिम चरण है। हमें बस परियोजना की स्थिति को बहाल करने की आवश्यकता है, इसलिए यह शाखा 'अस्थायी' की तरह ही सटीक होगा। तकनीकी रूप से हमें बस इसके पेड़ (फ़ोल्डर स्थिति) को निम्न-स्तरीय कमांड गिट कम- ट्री के माध्यम से कॉपी करने की आवश्यकता है । प्लस वर्तमान शाखा में विलय सिर्फ बनाया प्रतिबद्ध।

git merge --ff $(git commit-tree temp^{tree} -m "Fix after rebase" -p HEAD)

और अस्थायी शाखा हटाएं

git branch -D temp

बस इतना ही। हमने छिपे हुए मर्ज के माध्यम से एक रिबेस किया।

इसके अलावा मैंने एक पटकथा लिखी है, ताकि इसे संवाद तरीके से किया जा सके, आप इसे यहां पा सकते हैं ।


13

नोट: Git 2.14.x / 2.15 (Q3 2017) के साथ, git rebaseसंघर्ष के मामले में संदेश स्पष्ट हो जाएगा।

देखें प्रतिबद्ध 5fdacc1 द्वारा (16 जुला 2017) विलियम Duclot ( williamdclt)
(द्वारा विलय Junio सी Hamano - gitster- में 076eeec प्रतिबद्ध , 11 अगस्त 2017)

rebase: अनुभवहीन उपयोगकर्ताओं के लिए संकल्प संदेश को स्पष्ट करें

इससे पहले:

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"

उपरांत:

Resolve all conflicts manually, 
mark them as resolved with git add/rm <conflicted_files>
then run "git rebase --continue".

You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".')

Git UI को उन त्रुटि संदेशों को संबोधित करके सुधारा जा सकता है जिनकी वे मदद करते हैं: अनुभवहीन और आकस्मिक git उपयोगकर्ता।
इस इरादे के लिए, यह सुनिश्चित करने में मददगार है कि उन संदेशों में उपयोग की जाने वाली शर्तों को उपयोगकर्ताओं के इस सेगमेंट द्वारा समझा जा सकता है, और वे उन्हें समस्या को हल करने के लिए मार्गदर्शन करते हैं।

विशेष रूप से, गिट रीबेस के दौरान एक पैच को लागू करने में विफलता एक आम समस्या है जो अनुभवहीन उपयोगकर्ता के लिए बहुत अस्थिर हो सकती है।
उन्हें संघर्ष के समाधान की ओर ले जाना महत्वपूर्ण है (जो कि 3-चरणों की प्रक्रिया है, इस प्रकार जटिल है) और उन्हें आश्वस्त करें कि वे ऐसी स्थिति से बच सकते हैं जिसे वे " --abort" के साथ नहीं संभाल सकते ।
यह उन दो बिंदुओं का जवाब देता है जो रिज़ॉल्यूशन प्रक्रिया का विवरण देकर और क्रिप्टोकरंसी भाषा से बचते हैं।


1
अच्छा! मदद पेज परिवर्तन को कम करके संघर्ष को हल करने के लिए कहता है, लेकिन नहीं! यहां हमें कमिट छोड़ना होगा और इसके बजाय सिर्फ मर्ज जारी रखना होगा! (हेल्प पेज: help.github.com/articles/… )
जेरेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.