Git rebase --continue तब भी शिकायत करता है जब सभी मर्ज संघर्ष हल हो गए हैं


115

मैं एक ऐसे मुद्दे का सामना कर रहा हूं जिसका मुझे यकीन नहीं है कि कैसे हल किया जाए।

मैंने अपनी शाखा से गुरु के खिलाफ विद्रोह किया:

git rebase master

और निम्नलिखित त्रुटि मिली

 First, rewinding head to replay your work on top of it...
 Applying: checkstyled.
 Using index info to reconstruct a base tree...
 Falling back to patching base and 3-way merge...
 Auto-merging AssetsLoader.java
 CONFLICT (content): Merge conflict in AssetsLoader.java
 Failed to merge in the changes.
 Patch failed at 0001 checkstyled.

इसलिए मैं अपने पसंदीदा संपादक के पास गया, 1 पंक्ति संघर्ष तय किया, फ़ाइल को सहेजा और एक git स्टेटस किया और निम्न आउटपुट प्राप्त किया:

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   PassengerContactHandler.java
 #
 # Unmerged paths:
 #   (use "git reset HEAD <file>..." to unstage)
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #
 #  both modified:      AssetsLoader.java
 #

मैंने एसेट्सलाडेर.जाव और गिट स्टेट को जोड़ा और निम्नलिखित मिला:

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   AssetsLoader.java
 #  modified:   PassengerContactHandler.java
 #

और जब मैंने रिबेट किया - कॉन्टिन्यू मैं मिलता है:

git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

मुझे पता है कि मैं पैच को छोड़ सकता हूं और रिबास जारी रख सकता हूं, लेकिन मुझे यकीन नहीं है कि पैसेंजरकॉन्टैक्टहैंडलर.जवा में बदलाव मेरी शाखा में किए जाएंगे या नहीं।

इसलिए मुझे यकीन नहीं है, मुझे कैसे आगे बढ़ना चाहिए?

संपादित करें: क्या ऐसा हो सकता है कि सुलझी हुई संघर्ष वाली फाइल बिल्कुल मूल संस्करण की तरह हो?

बहुत बहुत धन्यवाद, लुकास

संपादित करें, यह सिर्फ मेरे लिए फिर से हुआ:

यह मेरे लिए फिर से हुआ,

(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   assets/world/level1/Level-1.xml
#   modified:   George.java
#   modified:   DefaultPassenger.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   mb-art/originalAssets/27dec/

((307ac0d ...) | REBASE) $ git rebase --continue

You must edit all merge conflicts and then
mark them as resolved using git add

गिट - विसर्जन

git version 1.7.1

की पूर्ण उत्पादन है git status, है ना? इसके नीचे कोई लापता अनुभाग नहीं?
कैस्केबेल

git-rebaseअगर वहाँ कोई भी नहीं कर रहे हैं कि वहाँ कभी नहीं अनसुलझे संघर्ष की सूचना चाहिए। यदि आप एक सरल परीक्षण मामले में समस्या को पुन: उत्पन्न करने का प्रबंधन कर सकते हैं, तो यह डिबग करना बहुत आसान होगा, लेकिन फिर भी, यदि आपके पास git statusकब कोई संघर्ष नहीं है git rebase --continueऔर जीआईटी का अपना वर्जन चालू है, तो आप गैट देव को ईमेल करने की कोशिश कर सकते हैं। मेलिंग सूची git@vger.kernel.org पर उतनी ही नैदानिक ​​जानकारी है जितनी आपको मिल सकती है।
कास्काबेल

1
यह सिर्फ मेरे साथ फिर से हुआ, (307ac0d ...) | REBASE) $ git स्टेटस # फिलहाल किसी भी ब्रांच पर नहीं। # किए जाने वाले परिवर्तन: # ("रीसेट रीसेट करें <file> ..." का उपयोग unstage करने के लिए) # # संशोधित: संपत्ति / दुनिया / स्तर 1 / स्तर -1xml # संशोधित: जॉर्ज.जावा # संशोधित: DefaultPassenger.java # # अनट्रैक की गई फाइलें: # ("जोड <फ़ाइल> ..." का उपयोग करने के लिए जो किया जाएगा उसमें शामिल होने के लिए) # # mb-art / originalAssets / 27dec /
लुकास

मुझे लगता है कि आपको GITKRAKEN का उपयोग करना चाहिए, यह आपके संघर्षों को हल करने में आपकी मदद करेगा
निखिल भारद्वाज

जवाबों:


115

ऐसा इसलिए होता है क्योंकि जब कोई विरोधाभास तय होता है, तो आप उस शाखा में लागू किए गए पैच पर सभी कोड हटा देते हैं, जिस पर आप रिबास कर रहे हैं। git rebase --skipजारी रखने के लिए उपयोग करें ।

थोड़ा और विवरण:

आम तौर पर, रिबासिंग के दौरान एक संघर्ष को ठीक करते समय, आप परस्पर विरोधी फ़ाइल को संपादित करेंगे, वर्तमान में पैच में कुछ या सभी कोड को उस शाखा पर लागू किया जाएगा जिसे आप रिबेस करते हैं। पैच को ठीक करने और करने के बाद

git add your/conflicted/file
git status

आपको संशोधित फ़ाइल दिखाने वाली (आमतौर पर हरे रंग की) लाइन मिलेगी

संशोधित: आपकी / विवादित / फ़ाइल

git rebase --continue इस स्थिति में ठीक काम करेगा।

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

git rebase --continue

git के साथ शिकायत करेंगे

कोई परिवर्तन नहीं - क्या आप 'गिट ऐड' का उपयोग करना भूल गए?

इस स्थिति में वास्तव में आप क्या करना चाहते हैं इसका उपयोग करना है

git rebase --skip

पैच को छोड़ना। पहले मैंने ऐसा कभी नहीं किया था, क्योंकि मैं हमेशा अनिश्चित था कि वास्तव में अगर मैं किया तो क्या छोड़ दिया जाएगा, यह मेरे लिए स्पष्ट नहीं था कि "इस पैच को छोड़ें" वास्तव में क्या मतलब है। लेकिन अगर आपको कोई ग्रीन लाइन नहीं मिलती है

संशोधित: आपकी / विवादित / फ़ाइल

विवादित फ़ाइल को संपादित करने के बाद, इसे जोड़कर, और git स्टेटस कर, तो आप पूरी तरह से सुनिश्चित हो सकते हैं कि आपने पूरा पैच हटा दिया है, और आप इसका उपयोग नहीं कर सकते

git rebase --skip

जारी रखने के लिए।

मूल पोस्ट ने कहा कि यह कभी-कभी काम करता है:

git add -A
git rebase --continue
# works magically?

... लेकिन इस पर भरोसा न करें (और अपने भंडार फ़ोल्डर में बचे हुए फ़ाइलों को जोड़ने के लिए सुनिश्चित न हों)


1
मुझे वही मुद्दा और वही समाधान लग रहा था, जादुई भी लग रहा था!
bspink

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

जब तक आप सभी रद्दी फ़ाइलों को अपने रेपो में ट्रैक नहीं करना चाहते, तब तक ऐसा न करें।
जेड लिंच

git add ...लंबे रास्तों के साथ फ़ाइलों के ढेर को बदलने के बाद टाइप करने के लिए वास्तव में कष्टप्रद हो जाता है। क्या git add --all-the-files-i-changedमैं इससे पहले चला सकता हूं git rebase continue?
jozxyqk

3
कमांड गिट रिबेस --स्किप का उपयोग करते समय सावधानी बरतने के लिए, आप अपना काम खो सकते हैं (संपादित फाइलें)
यूनुस मरहानी

21

Git 1.7 में एक बग लगता है

इसे हल करने के बारे में एक अच्छा लेख यहां दिया गया है

मूल रूप से यह काम करना चाहिए, अगर आप ए

git diff

अपने संघर्षों को हल करने के बाद और फिर

git rebase --continue

कार्य करना चाहिए।


8

मुझे यह चेतावनी तब मिली जब मेरे पास अस्थिर फाइलें थीं। सुनिश्चित करें कि आपके पास कोई अस्थिर फाइल नहीं है। यदि आप अस्थिर फ़ाइलों में बदलाव नहीं चाहते हैं, तो परिवर्तनों को छोड़ दें

git rm <filename>  

2
इतना सरल यह एक टिप्पणी हो सकती है; इतना उपयोगी यह एक जवाब होना चाहिए। धन्यवाद!
लुकास लीमा

4

इसे अपनी कमांड लाइन में चलाने का प्रयास करें:

$ git mergetool

एक इंटरैक्टिव संपादक को लाना चाहिए जिससे आप संघर्षों को हल कर सकें। इसे मैन्युअल रूप से करने की कोशिश की तुलना में आसान है, और जब आप मर्ज करते हैं तो यह भी पहचान लेगा। उन परिस्थितियों से भी बचेंगे जहाँ आप दुर्घटना से पूरी तरह से नहीं मिलते हैं जब आप इसे मैन्युअल रूप से करने की कोशिश करते हैं।


बस लगा कि यह आसान हो सकता है और आपको भविष्य में इस तरह की स्थितियों से बचने की अनुमति देगा।
बाटकिंस

1
आपने मेरी शाम बचा ली। हालांकि यह एक सरल उपकरण है, लेकिन मैं कभी भी यह पता नहीं लगा पाऊंगा कि इस उपकरण के बिना मेरी उलझनों को कैसे सुलझाया जाए।
इऑनिल

4

संघर्ष को ठीक करने के बाद, सुनिश्चित करें कि बदली हुई फ़ाइलें आपकी चरणबद्ध फ़ाइलों में शामिल हैं। इससे मेरे लिए समस्या हल हो गई।


इसने मेरे लिए चाल चली। मैंने ओपी में बताए गए संदेश को प्राप्त करने के बाद सॉरीकेट्री की जांच की, और तुरंत कमांड विंडो में उल्लिखित दो फाइलों को बिना किसी बाधा के देखा। फ़ाइलों का मंचन किया, "git rebase --continue" चलाया और मैं वापस ट्रैक पर आ गया।
मास डॉट नेट

3

आप AssetsLoader.java में एक मर्ज संघर्ष याद किया। इसे खोलें और संघर्ष मार्करों (">>>>", "====", "<<<<<") के लिए देखें और फिर से जोड़ जोड़ दें। यदि आपको इसे खोजने में कठिनाई हो रही है, तो एक 'git diff --staged' करें।


3
मैंने सभी ट्रैक की गई फ़ाइलों पर एक grep किया और कोई संघर्ष मार्कर नहीं थे।
लुकास

git diff --stagedकुछ उपयोगी प्रकट करता है ? यह इंगित करता है कि आप रिबेज में इस बिंदु पर मर्ज संघर्ष (ओं) को हल करने के लिए कौन से बदलाव करने वाले हैं। एक "उफ़ होना चाहिए, यही वह नहीं है जो मैं इस" बिट को हल करने के लिए करना चाहता हूं।
ईथर

4
जब आप आगे बढ़ने की कोशिश करते हैं तो Git मर्ज संघर्ष मार्करों की तलाश नहीं करता है। यह सिर्फ यह देखने के लिए जांचता है कि सूचकांक एक साफ स्थिति में है। यदि आपने ऐसी फ़ाइल का मंचन किया है, जिसमें अभी भी इसमें विरोधी मार्कर हैं, तो आप संकेत दे रहे हैं कि आप इसमें उनके साथ यह करना चाहते हैं। यह शायद हमेशा एक गलती है, लेकिन यह आपको ऐसा करने देगा।
कास्कैबेल

@ ऐसा बिल्कुल भी कारण नहीं है। आप git addइसमें संघर्ष मार्करों के साथ भी एक फाइल कर सकते हैं । आखिरकार, ऐसी फाइलें पूरी तरह से कानूनी हो सकती हैं!
१५:५०

@ जेफ्रोमी: हा, जानकर अच्छा लगा! मैंने हमेशा यह माना कि मार्करों के लिए जाँच की गई थी, और अगर इसे जानबूझकर किया गया था, तो इसे अतीत में लागू करना होगा।
ईथर

3

Ive बस इस समस्या थी, और जबकि मुझे लगता है कि कुछ कारण हो सकता है, यहाँ मेरा है ...

मेरे पास एक जीआईटी प्री-कमिट हुक था जो कुछ शर्तों के तहत अस्वीकृत हो गया था। मैन्युअल रूप से कमिट करते समय यह ठीक है, क्योंकि यह हुक के आउटपुट को प्रदर्शित करेगा, और मैं या तो इसे ठीक कर सकता हूं या कमिट -नो-वेरिफिकेशन का उपयोग करके इसे अनदेखा करना चुन सकता हूं।

समस्या यह प्रतीत होती है कि जब रिबासिंग होती है, तो रिबास - कॉन्टिन्यू हुक को भी बुलाएगा (परिवर्तनों के सबसे अंतिम बाउट करने के लिए)। लेकिन रिबास हुक आउटपुट को प्रदर्शित नहीं करेगा, यह सिर्फ यह देखेगा कि यह विफल हो गया, और फिर एक कम विशिष्ट त्रुटि यह कहते हुए थूक दिया कि 'आपको सभी मर्ज संघर्षों को संपादित करना होगा और फिर उन्हें गिट ऐड का उपयोग करके हल के रूप में चिह्नित करना होगा'

इसे ठीक करने के लिए, अपने सभी परिवर्तनों को चरणबद्ध करें, और 'git rebase --continue' करने के बजाय, 'git कमिट' आज़माएँ। यदि आप एक ही हुक की समस्या से पीड़ित हैं, तो आपको इसके असफल होने के कारणों को देखना चाहिए।

दिलचस्प बात यह है कि, जीआईटी रिबेस के आउटपुट को गिट हुक से प्रदर्शित नहीं किया जाता है, यह हुक को बायपास करने के लिए एक -नो-सत्यापित को स्वीकार करता है।


1
मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। यहां और कुछ भी मेरे लिए काम नहीं करता था, लेकिन सिर्फ 'git कमिट' कर रहा था और फिर गर्भपात करना जादुई तरीके से हल करना लगता था जो भी विसंगति थी, और फिर मैं सफलतापूर्वक 'git rebase --continue' करने में सक्षम था।
patrickvacek

सिर्फ रिकॉर्ड के लिए, जैसा कि मैं हाल ही में इसी तरह के मुद्दे से जूझ रहा हूं, विकल्प git rebaseस्वीकार करता --no-verifyहै। हालाँकि, यह केवल pre-rebaseहुक को छोड़ देता है , लेकिन बाद वाले कॉल पर यह विकल्प लागू नहीं होता है git commit
pkrysiak

एक वैध बिंदु (परिवर्तन में बदलाव) शामिल है, लेकिन एक अच्छे उत्तर के लिए भी क्रिया।
जैक मिलर

1

मैं सिर्फ इस मुद्दे पर लड़खड़ा गया। मैं नहीं होगा git rebase --skip क्योंकि git statusस्पष्ट रूप से stagged संशोधनों, जो मैं रखना चाहता दिखा। हालांकि मेरे पास कुछ अतिरिक्त फाइलें थीं जो अप्रत्याशित रूप से आईं। मैंने साथ हल किया

git checkout .

हटाए गए संशोधनों को हटाने के लिए, फिर git rebase --continueसफल हुआ।


1

एक बार जब आप अपने परिवर्तन तय कर लेते हैं तो आप 'git add -A' चलाना भूल जाते हैं

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