56

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

मैंने सोचा कि इसका अंत था, लेकिन तब मुझे एहसास हुआ कि मेरी फाइलों में गिटमार्क हैं। इसलिए जैसा:

start = 
    expression 

validchar = 
    [0-9a-zA-Z_?!+\[email protected]#$%^&*/.] 

integer = 
<<<<<<< HEAD 
    digits:[0-9]+ 
     { return digits.join(""); } 
======= 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
>>>>>>> gh-pages 

फ़ाइलें मेरे द्वारा नहीं संपादित किया गया और इस शो लाइनों के साथ डाला: के बाद

  • प्रमुख लक्षण (<<<<<<< HEAD)
  • बदली हुई कोड की लाइनें
  • एक स्ट्रिंग से कम बराबर संकेतों (=======)
  • कोड
  • का नया संस्करण एक और पंक्ति संकेतों से अधिक और शाखा का नाम (>>>>>>> gh-pages)

इससे भी बदतर यह है कि फ़ाइल सामग्री अब क्रम में नहीं है। क्या कोई जानता है कि मैं उन फ़ाइलों को सामान्य कैसे प्राप्त करता हूं, और gh-branch में किए गए परिवर्तन मास्टर शाखा में विलय हो जाते हैं?

उत्तर

66

वे conflict markers हैं। आप अभी भी विलय की प्रक्रिया में हैं, लेकिन कुछ हिस्सों थे कि गिट स्वचालित रूप से विलय नहीं कर सका। आप need to hand-edit those parts पर आप जो चाहते हैं उसे प्राप्त करेंगे और फिर परिणाम देंगे।


उदाहरण के लिए, अपने विशेष मामले में, तो आप शायद इस तरह इसे हल करना चाहते हैं (नोट - तीर/सही पर पाठ सिर्फ मेरे नोट कर रहे हैं, कुछ आप फ़ाइल में टाइप करेंगे नहीं) :

integer = 
<<<<<<< HEAD         <-+ remove the bits here 
    digits:[0-9]+        | 
     { return digits.join(""); }    | 
=======          <-+ 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
>>>>>>> gh-pages        <-- and this 

और इस तरह आप के रूप में फाइल को सेव होगी ...

integer = 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
+0

जब मैं संपादन कर रहा हूं तो फाइल को कैसा दिखना चाहिए? – lowerkey

+3

@lowerkey ठीक है कि आप अंत में विलय किए गए परिणाम को कैसे देखना चाहते हैं। मेरा अनुमान है कि आप वास्तव में केवल 'gh-pages' संस्करण में हिस्सा चाहते हैं, इसलिए आप' <<<<<< 'से' ====== 'से सामान हटा देंगे और एकल को भी हटा देंगे '>>>>>>' लाइन, '=======' और '>>>>>>' के बीच वास्तविक कोड की दो पंक्तियों को छोड़कर। – Amber

+0

धन्यवाद, मुझे लगता है कि मुझे इसका लटका मिल रहा है। सिर से ====== तक सब कुछ हटाएं और फिर बचे हुए हेडमार्क को हटा दें। – lowerkey

19

बिल्कुल 'Git स्थिति' के साथ शुरू देखने के लिए आप क्या मिल गया है। यदि आपने विलय को निरस्त कर दिया है (या विलय निरस्त कर दिया गया है) और आपके पास कार्यशील निर्देशिका में विवादित फ़ाइलें हैं तो कुछ गलत हो गया। गिट स्थिति आपको बताएगी कि आप कहां हैं। उसके बाद, आपके पास कई विकल्प हैं। आप मर्ज प्रतिबद्ध समाधान हो जाना चाहिए या तो है, जो चुनौतीपूर्ण हो सकता है, या के रूप में एक उपकरण का उपयोग कर हाथ से:

git mergetool 

यदि आपकी फ़ाइलें मर्ज की आवश्यकता होगी, के रूप में सूचीबद्ध किया गया है मर्ज उपकरण काम करेंगे।

तुम भी में से एक प्रदर्शन कर सकते हैं: 1:: फ़ाइल नाम वाक्य रचना

git checkout --ours -- /path/to/conflicted-file  # this is probably the one you want 
git checkout --theirs -- /path/to/conflicted-file 

आप का उपयोग कर विभिन्न संस्करणों देख सकते हैं। स्पष्टीकरण के लिए here देखें। लेकिन उपर्युक्त सभी मानते हैं कि 'गिट स्टेटस' फ़ाइलों को विलय की आवश्यकता के रूप में दिखाता है।

अंत में, आप हमेशा का विकल्प है:

git reset --hard # sounds like --hard is what you need but check other options 
+4

मैं "गिट स्टेटस के साथ शुरू करने के लिए" की तरह पूर्णता प्राप्त करूंगा, यह देखने के लिए कि "आपको क्या मिला है" सलाह: यह कुछ सर्किलों में गिट को अपनी काल्पनिक जटिलता के लिए दोष देने के लिए परेशान है, लेकिन वास्तव में 'गिट स्थिति' के आउटपुट को पढ़ने में सावधानी बरतनी है यह समझने के लिए पर्याप्त है कि सबसे आम स्थितियों में आगे क्या करना है। इसलिए, वास्तव में: अगर कुछ गलत हो जाता है, तो रोकें, 'गिट स्थिति' पढ़ें, सोचें। – kostix

1

सभी उत्तर सही हैं, लेकिन यदि आप सभी संघर्ष के निशान Autoremove करना चाहते & फ़ाइलों autochange सिर रखना चाहते हैं, तो आप बना सकते हैं अपने खुद पार्टी स्क्रिप्ट की तरह: -

उदाहरण स्क्रिप्ट:

# vim /usr/sbin/solve.git

(बाद में संलग्न करें)

#!/bin/bash 
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .) 
do 
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f 
sed -i -e '/^>>>>>>> /d' $f 
echo "$f Fixed" 
done 
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify 

# chmod 755 /usr/sbin/solve.git

& बस को हल करने अपना Git रेपो/रास्ते में इसे चलाने:

$ cd <path_to_repo>
$ solve.git

सूचना: - ऊपर फ़ाइल एक्सटेंशन उल्लेख किया PHP, सीएसएस, जेएस, एचटीएमएल, एसवीजी & txt हैं।

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