Git मर्ज मेरी फ़ाइलों में HEAD निशान छोड़ दिया है


101

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

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

start =
    expression

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

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

फाइलों को मेरे द्वारा संपादित नहीं किया गया है और इसके साथ डाली गई लाइनें दिखाएँ:

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

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

जवाबों:


96

वे संघर्ष के मार्कर हैं । आप अभी भी विलय की प्रक्रिया में हैं, लेकिन कुछ हिस्से ऐसे थे जिन्हें Git अपने आप मर्ज नहीं कर सकता था। आपको उन हिस्सों को हाथ से संपादित करने की आवश्यकता होगी जो आप उन्हें चाहते हैं और फिर परिणाम दें।


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

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(""); }

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

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

1
हां, यह सही है। (देखभाल करने के लिए कोई वास्तविक "आराम" नहीं है - आप सिर्फ मर्ज के परिणाम को कम कर रहे हैं, जो कि आम तौर पर संघर्ष नहीं होने पर Git सामान्य रूप से स्वचालित रूप से करेगा।)
एम्बर

2
@lowerkey, कृपया विषय पर एक पुस्तक पढ़ने पर भी विचार करें । मैं उस पुस्तक को इसकी संपूर्णता में पढ़ने की सलाह दूंगा क्योंकि आप VCSes कैसे काम करते हैं, इसके बारे में कुछ बुनियादी जानकारी का अभाव है और भविष्य में संभावित समस्याओं के लिए खुद को तैयार करना बेहतर है।
कोस्टिक्स

1
कितनी मजेदार बात है। आप उस प्रश्न के उत्तर की ओर संकेत करते हैं जिसे इस एक के डुप्लिकेट के रूप में चिह्नित किया जा रहा है, हालांकि इस प्रश्न का उत्तर दूसरे प्रश्न में पाया जा सकता है।
t3chb0t

22

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

git mergetool

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

आप इनमें से एक भी कर सकते हैं:

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

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

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

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

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

4

सभी उत्तर सही हैं, लेकिन यदि आप सभी संघर्ष चिह्नों को ऑटोरेमोव करना चाहते हैं और HEAD रखने के लिए फ़ाइलों को आटोचेंज करना चाहते हैं, तो आप अपनी स्वयं की बैश स्क्रिप्ट बना सकते हैं जैसे: -

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

# 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, css, js, html, svg & txt हैं।


0

एटम में मेरे पास यह समस्या थी कि कुछ फाइलें ड्राइव में हल किए गए मर्ज संघर्ष को नहीं बचाती थीं, इसलिए मुझे मैन्युअल रूप से "सेव" पर क्लिक करना था। मुझे यह पता लगाने में काफी समय लगा।


0

मैं आ रहा हूँ इस सवाल । और मैं फ़ाइलों को मैन्युअल रूप से संपादित करने के बजाय आधे विलय की गई फ़ाइलों को मर्ज करने की कुछ स्वचालित विधि चाहता था ( जैसा कि अन्य उत्तरों में सुझाव दिया गया है, जो मैं वास्तव में आरामदायक नहीं हूं )। तो यहाँ मैं क्या कर रहा हूँ netbeans के माध्यम से कर रही है, लेकिन कमांड लाइन के माध्यम से भी किया जा सकता है।

अब, ध्यान में रखें, यह केवल तभी काम करता है जब merge->add->commit , आपको एहसास हुआ कि आपने गड़बड़ कर दी है, और प्रक्रिया के माध्यम से फिर से जाना चाहते हैं।

चरण 1: पिछली कमेट पर रीसेट करें।

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

चरण 2: शाखा को फिर से जोड़ने का प्रयास करें

git merge --ff origin/feature/YOUR-Branch_here

यदि आप GUI का उपयोग कर रहे हैं तो इस बिंदु पर आपको विलय की खिड़की से संकेत दिया जाएगा। और फिर आप सामान्य रूप से आगे बढ़ सकते हैं।

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