किसी शाखा में फ़ाइल हटाने के कारण मैं एक मर्ज संघर्ष कैसे ठीक करूं?


208

मैंने एक dialogशाखा बनाई है और जब मैं इसे masterशाखा में विलय करने की कोशिश करता हूं । 2 संघर्ष हैं। मैं नहीं जानता कि कैसे हल करना है CONFLICT (delete/modify)। क्या आप मुझे बता सकते हैं कि मुझे क्या करना है?

$ git checkout master
$ git merge dialog
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD. Version HEAD of res/layout/dialog_item.xml left in tree.
Auto-merging src/com/DialogAdapter.java
CONFLICT (content): Merge conflict in src/DialogAdapter.java
Automatic merge failed; fix conflicts and then commit the result.

मैंने खोला है src/DialogAdapter.java, संघर्ष को ठीक किया है और किया git add src/DialogAdapter.java। मुझे और क्या करने की जरूरत है?


आप इस पोस्ट को स्टैक ओवरफ्लो पर पढ़ सकते हैं: - मैं गेट फिक्स को कैसे ठीक कर सकता हूं? स्वीकृत उत्तर गिट मैनुअल का संदर्भ देता है ।
४४ पर हैवीड

जवाबों:


271

संघर्ष संदेश:

CONFLICT (हटाएं / संशोधित करें): res / layout / dialog_item.xml डायल में हटा दिया गया और HEAD में संशोधित किया गया

इसका मतलब है कि res/layout/dialog_item.xmlजिस 'डायलॉग' की शाखा में आप विलय कर रहे थे, उसे हटा दिया गया था, लेकिन उसे HEAD में संशोधित किया गया था (आप जिस शाखा में विलय कर रहे हैं)।

इसलिए आपको यह तय करना होगा कि क्या

  • " git rm res/layout/dialog_item.xml" का उपयोग करके फ़ाइल निकालें

या

  • HEAD से संस्करण स्वीकार करें (शायद इसे संपादित करने के बाद) " git add res/layout/dialog_item.xml" के साथ

फिर आप " git commit" के साथ मर्ज को अंतिम रूप देते हैं ।

ध्यान दें कि git आपको चेतावनी देगा कि आप एक मर्ज कमिट बना रहे हैं, (दुर्लभ) मामले में जहां वह ऐसा कुछ है जो आप नहीं चाहते हैं। संभवतः उन दिनों से रहता है जहाँ कहा गया था कि मामला कम ही था।


22
पूर्व की कोशिश की ( git rm …) लेकिन मुझे मिलता है …: needs mergeऔर rm '…'जो मैं एक कठिन समय की व्याख्या कर रहा हूँ। और फिर अगर मैं कमिट करने की कोशिश करता हूं, तो stackoverflow.com/questions/19985906/… फिर से आता है।
जेसी ग्लिक

17
उस टिप्पणी के उत्तरार्ध का कभी भी ध्यान न रखें। Git से आउटपुट कुछ चिंताजनक है लेकिन हानिरहित प्रतीत होता है।
जेसी ग्लिक

4
क्या जन दृष्टिकोण है? मेरे पास हाथ में एक प्रोजेक्ट है जो बाहरी सामान पर निर्भर करता है जिसे मैं नहीं रखना चाहता। इसलिए बहुत सारी फाइलें हैं जो ऊपर की ओर संशोधित थीं और मैं अपनी शाखा में हटाना चाहता हूं कि मैं कोई बात नहीं कर रहा हूं। इसे एक-एक करके करना थकाऊ है।
एम एल टी

2
@ डिटेल: आप परिवर्तित फ़ाइलों की सूची प्राप्त करने के लिए और / या git ls-files --stage/ या का उपयोग कर सकते हैं और उन्हें हटाने या अपने या अपने संस्करण को स्वीकार करने के लिए एक स्क्रिप्ट चला सकते हैं। git status --porcelaingit diff-files <something>
जैकब नर

1
@Honey: CONFLICT संदेश में यह वर्णन शामिल है कि किस शाखा में कौन सा परिवर्तन हुआ था। आप इसे बाद में git statusया साथ देख सकते हैं git diff --cc। वहाँ भी है git log --mergeजो मदद कर सकता है ...
Jakub Nar alsobski

74

मैं आम तौर पर सिर्फ दौड़ता हूं git mergetoolऔर अगर मैं संशोधित फाइल रखना चाहता हूं या इसे हटा देना चाहता हूं तो यह मुझे संकेत देगा। यह एक त्वरित तरीका है IMHO क्योंकि यह प्रति फ़ाइल कई के बजाय एक कमांड है।

यदि आपके पास एक विशिष्ट उपनिर्देशिका में हटाई गई फ़ाइलों का एक गुच्छा है और आप चाहते हैं कि उन सभी को फ़ाइलों को हटाकर हल किया जाए, तो आप यह कर सकते हैं:

yes d | git mergetool -- the/subdirectory

dप्रत्येक फ़ाइल को हटाने का चयन करने के प्रदान की जाती है। आप mसंशोधित फ़ाइल रखने के लिए भी उपयोग कर सकते हैं। आपके द्वारा चलाए जाने पर आप जो संकेत देखते हैं, उससे लिया गया है mergetool:

Use (m)odified or (d)eleted file, or (a)bort?

1
@ ब्रायनमिंटन मुझे भी, अन्य सामान सिर्फ एक दुष्चक्र था
नैट एल

2
यह गुस्सा आता है जब इसकी कई फाइलें, क्या सभी के लिए एक जवाब देने का एक तरीका है?
सुविचार ४२

2
@ ideasman42 मैंने बैच-डिलीट समाधान दिखाने के लिए अपना उत्तर अपडेट कर दिया है।
void.pointer

1
मैं वास्तव में मर्ज टूल के बारे में नहीं जानता था। तुमने मेरा दिन बचा लिया दोस्त!
मर्ट

6

यदि आप विंडोज़ पर Git Gui का उपयोग कर रहे हैं,

  1. मर्ज को रोकें
  2. सुनिश्चित करें कि आप अपने लक्ष्य शाखा पर हैं
  3. खोजकर्ता से विरोधी फ़ाइल हटाएं
  4. Git Gui (F5) में परिवर्तन के लिए Rescan
  5. ध्यान दें कि परस्पर विरोधी फ़ाइल हटा दी गई है
  6. कमिट मेनू से स्टेज चेंजेड फाइल्स टू कमेट (Ctrl-I) का चयन करें
  7. "हटाई गई परस्पर विरोधी फ़ाइल" जैसी एक टिप्पणी दर्ज करें
  8. प्रतिबद्ध (ctrl-enter)
  9. अब यदि आप मर्ज को पुनः आरंभ करते हैं तो यह (उम्मीद) काम होगा।

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