git: मुझे अपने कोड का नवीनतम संस्करण कैसे मिलेगा?


200

मैं Git 1.7.4.1 का उपयोग कर रहा हूं। मैं अपने कोड का नवीनतम संस्करण रिपॉजिटरी से प्राप्त करना चाहता हूं, लेकिन मुझे त्रुटियाँ मिल रही हैं ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

मैंने उन फ़ाइलों की स्थानीय प्रतियों को हटा दिया है जिनके बारे में उपकरण शिकायत कर रहा है, लेकिन मुझे अभी भी त्रुटियां हैं। मैं दूरस्थ रेपो से नवीनतम संस्करण की जांच कैसे करूं? - डेव


1
@ नीचे Kzqai के जवाब से मुझे मदद मिली: बस git fetchपहले करने की कोशिश करो । मुझे विरोध नहीं हो रहा था, लेकिन यह है कि मुझे कोड का नवीनतम संस्करण कैसे मिला।
क्रिस के

जवाबों:


258

यदि आप किसी भी स्थानीय परिवर्तन (अनट्रैक या जेनरेट की गई फ़ाइलों या सबप्रॉप्टरीज़ सहित) के बारे में परवाह नहीं करते हैं, जो कि बस यहां होती है) और रेपो से एक कॉपी चाहते हैं:

git reset --hard HEAD
git clean -xffd
git pull

फिर, यह आपके द्वारा स्थानीय रूप से किए गए किसी भी बदलाव को ध्यान से उपयोग करेगा। rm -Rfऐसा करते समय सोचें ।


1
मैंने इन आदेशों की कोशिश की और अभी भी त्रुटि मिली, "CONFLICT (सामग्री): सेलेनियम / चींटी / build.xml में मर्ज संघर्ष" (दूसरों के बीच)। मैं रेपो में क्या है, इसके साथ अपनी फ़ाइल के नवीनतम संस्करण को लिखना चाहता हूं। मैं क्या कर सकता हूँ??
डेव

31
git clean -fवास्तव में उत्तर का हिस्सा नहीं है। यह रिपॉजिटरी में नहीं रखी जा रही फाइलों को हटा देगा (जैसे मेरे मामले में, लॉग फाइलें); आपको git pullफिर से काम करने के लिए ऐसा करने की आवश्यकता नहीं है , बस git reset --hard HEADपर्याप्त है।
डैरेन कुक

12
Esh, आदमी, newbies git करने के लिए कुछ हटाने के आदेशों में से एक की सिफारिश नहीं है।
काजकाई

6
@DarrenCook मुझे लगता है कि git clean -fयदि आप अपने रिपॉजिटरी का असली क्लीन अप चाहते हैं तो यह महत्वपूर्ण है। यह टीएफएस और मेरे मामले में "फ़ोल्डर से सभी हटाएं -> नवीनतम संस्करण प्राप्त करें / विशिष्ट करें" करने के बराबर है और यह वही है जो मैं चाहता था।
RPDeshaies

3
@Darren मुझे लगता है कि git क्लीन -f`` महत्वपूर्ण भी है। मैं नवीनतम संस्करण प्राप्त करना चाहता हूं, और न ही अप्रचलित कैश प्रविष्टियों, या अन्य उत्पन्न संसाधनों को रखना चाहता हूं जो रेपो पर नहीं हैं। इस तथ्य के बारे में जवाब स्पष्ट है कि यह स्थानीय परिवर्तन को हटा देगा और रेपो से अंतिम संस्करण की नकल करेगा, इसलिए यह मेरे लिए एकदम सही है। अगर मैं वास्तव में उन्हें अपडेट के बीच रखने की आवश्यकता है, तो मैं अपनी लॉग फ़ाइलों को किसी अन्य स्थान पर ले जाऊंगा।
बालमिपुर

231

केस 1: स्थानीय परिवर्तनों की परवाह न करें

  • समाधान 1: नवीनतम कोड प्राप्त करें और कोड रीसेट करें

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • समाधान 2: फ़ोल्डर को हटा दें और फिर से क्लोन करें: डी

    rm -rf [project_folder]
    git clone [remote_repo]
    

केस 2: स्थानीय परिवर्तनों की देखभाल करें

  • समाधान 1: नए-ऑनलाइन संस्करण के साथ कोई विरोध नहीं

    git fetch origin
    git status
    

    रिपोर्ट कुछ इस तरह होगी:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    फिर नवीनतम संस्करण प्राप्त करें

    git pull
    
  • समाधान 2: नए-ऑनलाइन संस्करण के साथ संघर्ष

    git fetch origin
    git status
    

    रिपोर्ट कुछ इस तरह होगी:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    अपने स्थानीय परिवर्तन करें

    git add .
    git commit -m ‘Commit msg’
    

    परिवर्तन प्राप्त करने का प्रयास करें (विफल हो जाएगा)

    git pull
    

    रिपोर्ट कुछ इस तरह होगी:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    संघर्ष फ़ाइल खोलें और संघर्ष को ठीक करें। फिर:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    रिपोर्ट कुछ इस तरह होगी:

    Already up-to-date.
    

अधिक जानकारी: मैं पिछली प्रतिबद्धता को वापस करने के लिए 'git reset --hard HEAD' का उपयोग कैसे करूँ?


@ tvl.How मैं अपने कोड के बिना (शाखा में संघर्ष) करने के लिए नवीनतम अपडेट प्राप्त कर सकता हूं..प्लीज मेरी मदद करें
user3354457

@ user3354457 xm, दिलचस्प सवाल। मैंने पहले कभी यह कोशिश नहीं की है, लेकिन आप इसे आज़मा सकते हैं और वापस रिपोर्ट कर सकते हैं;) इसलिए: - बदलावों के साथ एक पैच बनाएं: git diff> uncommited-changes.patch - शाखा को रीसेट करें - परिवर्तन खींचें - पैच लागू करें
tvl

3
यह उत्तर उस उत्तर की तुलना में कहीं अधिक उत्थान के योग्य है जिसे उत्तर के रूप में स्वीकार किया गया है।
जेम्स

@ जेम्स :) मुझे खुशी है कि मेरा जवाब आपकी मदद करता है। टिप, दस्तावेज़ीकरण लिखने की कोशिश करें जैसे कि आप किसी विषय के बारे में कुछ नहीं जानते हैं और निश्चित रूप से शब्दशः आपको वापस लाने में मदद करेंगे।
टीवीएल

4
गिट लाने के लिए सर्वश्रेष्ठ पूर्ण उत्तर। इस पोस्ट को लॉक किया जाना चाहिए
Callat

17

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

यहां एक दृष्टिकोण है जो आपके परिवर्तन को आपकी कार्यशील प्रति से बाहर ले जाता है और "स्टैश" में (पुनर्प्राप्ति योग्य होना चाहिए वास्तव में यह पता चला है कि आपको कभी भी फिर से उनकी आवश्यकता है), इसलिए आप नवीनतम परिवर्तनों को अपस्ट्रीम से नीचे खींच सकते हैं।

git stash  
git pull

यदि आप कभी भी अपनी फ़ाइलों (अपस्ट्रीम परिवर्तन और सभी के साथ संभावित संघर्ष) को पुनर्प्राप्त करना चाहते हैं, तो git stash applyउन परिवर्तनों को अपने कोड के शीर्ष पर चलाने के लिए चलाएँ । इस तरह, आपके पास "पूर्ववत" दृष्टिकोण है।


1
मैं शायद git stash popतब तक उपयोग करने की सलाह
दूंगा

7

आपको पहले अपनी फ़ाइलों को मर्ज करना होगा। एक है git statusक्या फाइलों मर्ज करने (इसका मतलब है आप पहली बार विवादों को सुलझाने की जरूरत है) की आवश्यकता है यह देखने के लिए। एक बार यह पूरा हो जाने के बाद, git add file_mergedअपना काम pullफिर से करें।


2
धन्यवाद। मैं इस समस्या का सामना कर रहा था। मेरी कार्यशील फ़ाइलों में कुछ बदलाव हैं, जिन्हें मैं नहीं करना चाहता। लेकिन मैं इस मामले में एक पकड़ पुल नहीं कर सकता। तो मैं करता हूं - गिट स्टैश, गिट पुल - क्रेबेज, गिट स्टैश पॉप। तब मैन्युअल रूप से विलय और Git ऐड file_merged
RuntimeException

6

इस कोड को आज़माएं

cd /go/to/path
git pull origin master

5
Stackoverflow में आपका स्वागत है! कृपया अपने समाधान में कुछ स्पष्टीकरण जोड़ने पर विचार करें कि यह कैसे समस्या को हल करता है। यह आपके उत्तर को और भी उपयोगी बना देगा
dkackman

2

यदि आप अपने काम करने वाले फ़ोल्डर में सब कुछ फेंकना चाहते हैं (जैसे कि एक विफल या निरस्त मर्ज के परिणाम) और एक स्वच्छ पिछली प्रतिबद्ध पर वापस जाएं, तो ए git reset --hard


1

मैं समझता हूं कि आप अपने स्थानीय परिवर्तनों को तोड़ना चाहते हैं और अपने रिमोट पर क्या करना चाहते हैं?

यदि बाकी सब विफल हो जाता है, और यदि आप (काफी समझ से) "रीसेट" से डरते हैं, तो सबसे सरल बात यह है कि एक नई निर्देशिका में मूल क्लोन करना और अपने पुराने को कचरा करना।


1

इस आदेश को चलाने से आपको सबसे हाल का टैग मिलेगा जो आमतौर पर आपकी परियोजना का संस्करण है:

git describe --abbrev=0 --tags

0

यह मुझे लगता है जैसे आपको core.autocrlf-problems हो। core.autocrlf = true आपको विंडोज़ पर वर्णित उन समस्याओं की तरह दे सकता है यदि CRLF की नई सूचियों को रिपॉजिटरी में चेक किया गया था। रिपॉजिटरी के लिए core.autocrlf अक्षम करने का प्रयास करें, और हार्ड-रीसेट करें।


0

यदि आप Git GUI का उपयोग कर रहे हैं, तो पहले प्राप्त करें।

दूरस्थ मेनू के माध्यम से प्राप्त करें >> प्राप्त करें >> उत्पत्ति। मर्ज मेनू के माध्यम से मर्ज करें> मर्ज स्थानीय।

निम्नलिखित संवाद प्रकट होता है।

यहां छवि विवरण दर्ज करें

ट्रैकिंग शाखा रेडियो बटन (डिफ़ॉल्ट रूप से चयनित भी) का चयन करें, पीले बॉक्स को खाली छोड़ दें और मर्ज को दबाएं और इसे फाइलों को अपडेट करना चाहिए।

मैंने इन चरणों को करने से पहले ही कुछ स्थानीय बदलावों को वापस कर दिया था क्योंकि मैं उन रास्ते को छोड़ना चाहता था इसलिए मुझे बाद में मर्ज के माध्यम से समाप्त नहीं करना है।

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