2011-01-06 16 views
8

मैं अपने .emacs निर्देशिका में खींच रहा था, और निम्न संघर्ष मारा:गिट आरएम फ़ाइल के बाद; प्रतिबद्ध - दूरस्थ शाखा से फ़ाइल वापस कैसे प्राप्त करें?

CONFLICT (add/add): Merge conflict in elisp/dired-details+.el 

Git स्थिति निम्न से पता चला है:

Unmerged paths: 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# both added:   elisp/dired-details+.el 

ठीक है, तो Git git rm का उपयोग कर का सुझाव दिया। मैं स्थानीय फ़ाइल को उस फ़ाइल के साथ पूरी तरह से बदलना चाहता हूं जिसमें मैं खींच रहा हूं, इसलिए ऐसा लगता है कि यह समझदार है ... तो मैं git rm elisp/dired-details+.el और git merge करता हूं। मुझे मिलता है:

गिट विलय: घातक: आपने अपना विलय निष्कर्ष निकाला नहीं है (MERGE_HEAD मौजूद है)। कृपया विलय करने से पहले अपने परिवर्तन करें।

ठीक है, ठीक है: git commit -a -m "ugh merge conflicts"; git pull origin master

अब सब कुछ ठीक विलीन हो जाती है, सिवाय इसके कि मैं dired-details+.el याद आ रही है के लिए, मैं एक तरह से उलझन में हूँ, और मैं निम्नलिखित के जवाब जानना चाहते हैं:

  1. मैं git-rm पूर्ववत कैसे और से उस फ़ाइल को मिलता है दूरस्थ शाखा? ..
  2. क्यों पहली जगह में एक संघर्ष? .. add/add के साथ यहाँ पर क्या हो रहा है? ..
  3. क्या मैं git-rm के बजाय किया जाना चाहिए 'फ़ाइल मैं बदलने के लिए चाहते थे ing था? ..

उत्तर

9

सबसे पहले, git reset --hard HEAD^ का उपयोग करके अपने विलय प्रतिबद्धता को पूर्ववत करें। ध्यान दें कि यह अंतिम प्रतिबद्धता को मिटा देगा और आपकी कार्यशील प्रति को पिछली प्रतिबद्धता की स्थिति में रीसेट करेगा, इसलिए यह समझने के लिए सावधान रहें कि ऐसा करने से पहले यह क्या करेगा। gitk इसे देखने में मदद कर सकता है।

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

इस चरण में आपको क्या करना है, उस संस्करण में अपनी कार्यरत प्रतिलिपि में विवादित फ़ाइल को अपडेट करें जिसे आप रखना चाहते हैं। आम तौर पर यह संघर्ष मार्करों की जांच करके और फ़ाइल को तदनुसार समायोजित करके किया जाता है। आपके मामले में, यदि आप निश्चित रूप से जानते हैं कि आप जिस शाखा से विलय कर रहे हैं उसकी प्रतिलिपि चाहते हैं, तो आप इसे करने के लिए git show :3:elisp/dired-details+.el > elisp/dired-details+.el का उपयोग कर सकते हैं। फिर git add elisp/dired-details+.el गिट को बताने के लिए कि आपने उस फ़ाइल में संघर्ष को हल किया है और फिर git commit समाप्त करने के लिए।

यहां, git show :3:... फ़ाइल के संस्करण को MERGE_HEAD से अनुरोध कर रहा है। यदि आपको एक अलग संस्करण की आवश्यकता है, तो आप विलय के "अपने" पक्ष के लिए सामान्य पूर्वजों या 2 के लिए 1 का भी उपयोग कर सकते हैं।

+0

ठीक है, यह सब हिंडसाइट में इतना स्पष्ट प्रतीत होता है। मुझे इसके बारे में पता नहीं था: एन: नोटेशन, काफी उपयोगी लगता है। –

संबंधित मुद्दे