Git पुल: त्रुटि: प्रविष्टि फू अपटूडेट नहीं। मर्ज नहीं कर सकते


86

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

मैंने कोशिश की:

git reset --hard

और मुझे भी यही समस्या है

काम करने के लिए लगता है कि केवल एक ही चीज अपमानजनक फ़ाइल को हटा रहा है और फिर से एक पुल खींचने की कोशिश करता है।

मैं भी git stashएक के बाद की कोशिश की है git pull। नही जाओ।

संपादित करें: पोर्टेबलगेट-1.6.4-प्रीव्यू 20090729 का उपयोग करते हुए, ताकि पिछली त्रुटियों के साथ किसी भी पिछले कीड़े को ठीक किया जाए।


देखें कि क्या git.or.cz/gitwiki/GitFaq में स्पष्टीकरण मदद करता है।
जैकब नार atबस्की

Ditto " केवल एक चीज जो काम करने लगती है, वह अपमानजनक फ़ाइल को हटा रही है और फिर से एक git पुल की कोशिश करें "। मेरे लिए, कम से कम एक फ़ाइल git में नहीं थी; यह एक वाइल्डकार्ड नियम द्वारा प्रमाणित किया गया था। यह सुनिश्चित नहीं है कि वे ब्लॉकर्स क्यों थे, हालांकि।
रफिन

3
मैं इसे चलाकर हल करने में सक्षम था git rm --cached learned/tests/temp_funcs.py- चूँकि मैं वैसे भी चाहता था कि फाइल अनट्रेक्टेड फाइल्स लिस्ट में बनी रहे , इसलिए git rm --cachedमुझे इस मामले में अनब्लॉक कर दिया।
दीप

1
यह एक मर्ज के दौरान मेरे साथ हुआ, जिसकी मैंने इच्छा की थी --abort। प्रस्तावित समाधानों में से किसी ने मुझे अपमानित करने की अनुमति नहीं दी, सिवाय अपमानजनक फाइलों को हटाने के।
ट्रेवर रीड

जवाबों:


55

इसे ठीक करने के कुछ तरीके हैं लेकिन मैंने पाया है कि मेरे लिए git stash अच्छा काम करता है। यह अस्थायी रूप से आपके स्थानीय परिवर्तनों को दूसरी जगह पर रखता है। फिर आप नवीनतम परिवर्तनों को खींचने के लिए खींच सकते हैं। और फिर आप अपने स्थानीय परिवर्तन वापस पा सकते हैं।

सिर्फ इस तरह:

$ git pull
...
...
file your_file.rb not up to date, cannot merge.

$ git stash
$ git pull
$ git stash pop

21
मूल प्रश्न से: "मैंने" गिट स्टैश "की भी कोशिश की है और उसके बाद" गिट पुल "। कोई गो नहीं।"
चार्ल्स वुड

मेरे लिए काम नहीं किया - मेरे मामले में मुझे git rm --cachedपूरी टिप्पणी करनी थी : stackoverflow.com/questions/1248029/…
दीप

37

यदि आप कुछ फ़ाइलों को अनदेखा करने के लिए अनुक्रमणिका को अद्यतन करते हैं तो ऐसा हो सकता है:

git update-index --assume-unchanged <file>

और फिर उदाहरण के लिए कुछ अन्य शाखा की जाँच करें:

git checkout <branch>
> error: Entry '<file>' not uptodate. Cannot merge.

मजबूरन इंडेक्स रिफ्रेश समस्या को ठीक करता है:

git update-index --really-refresh
<file>: needs update

के बाद:

git reset --hard 

और फिर सब कुछ वापस सामान्य होना चाहिए।


1
मैं इसे चलाकर हल करने में सक्षम था git rm --cached learned/tests/temp_funcs.py- चूँकि मैं वैसे भी चाहता था कि फाइल अनट्रेक्टेड फाइल्स लिस्ट में बनी रहे , इसलिए git rm --cachedमुझे इस मामले में अनब्लॉक कर दिया।
दीप

3
क्या git update-index --really-refreshटुकड़ा गायब था! ठीक है, यह पता लगाना मुश्किल था
बर्नार्डो दाल कॉर्नो

28

इस तरह की समस्या अक्सर एक रिपॉजिटरी से खींचने की कोशिश के कारण होती है जिसमें दो फाइलनाम होते हैं जो केवल मामले में भिन्न होते हैं। यदि आप FAT, NTFS केस-असंवेदनशील मोड में हैं (अनिवार्य रूप से, किसी भी समय यह विंडोज के तहत इस्तेमाल किया जा रहा है), या HFS + केस-असंवेदनशील मोड में है, और दो फाइल "फोब्बर" और "फ़ोबार" हैं, तो गिट दो अलग देखेंगे फाइलें, लेकिन फाइलसिस्टम केवल एक को देखेगा, जिससे सभी प्रकार की समस्याएं होंगी। Git चेकआउट करेगा, कहेगा, "FOOBAR", और फिर चेकआउट "foobar", जिसे फाइल सिस्टम केवल "FOOBAR" की सामग्री को बदलने के रूप में देखता है, लेकिन इसे जगह पर छोड़ देता है। अब गिट के लिए, यह प्रतीत होता है कि "फोब्बर" को "फोब्बर" की सामग्री से बदल दिया गया है, और "फोब्बर" चला गया है।

इस बुनियादी समस्या की दो अलग-अलग अभिव्यक्तियाँ हैं। एक तब होता है जब आपके भंडार में वास्तव में दो फाइलें होती हैं जो केवल मामले में भिन्न होती हैं। इस मामले में, आपको एक केस-संवेदी फ़ाइल सिस्टम पर काम करने की आवश्यकता है, या आपको यह सुनिश्चित करने के लिए रिपॉजिटरी को संपादित करना होगा कि इस प्रकार की कोई टक्कर नहीं होती है; केस-असंवेदनशील फाइल सिस्टम बस इस रिपॉजिटरी की सामग्री को स्टोर नहीं कर सकता है।

एक अलग मामला जिसे आप कर सकते हैं, वह है जब एक नाम होता है जो फ़ाइल के मामले को बदल देता है। उदाहरण के लिए, कहें कि Git रिपॉजिटरी में "EXAMPLE" से "उदाहरण" का नाम शामिल है। इससे पहले कि Git नए संस्करण की जांच करे, यह सुनिश्चित करने की कोशिश करेगा कि यह आपकी डिस्क पर मौजूद कुछ मौजूदा फ़ाइल को अधिलेखित नहीं कर रहा है। चूंकि यह सोचता है कि "उदाहरण" एक नया फ़ाइल नाम है, यह फ़ाइल सिस्टम से पूछेगा कि क्या यह मौजूद है, और फाइल सिस्टम "EXAMPLE" को देखेगा और हां कहेगा, इसलिए Git नए संस्करण की जांच करने से इंकार कर देगा क्योंकि उसे लगता है कि यह ओवरराइटिंग होगा। अनट्रैक फ़ाइलें। इस मामले में, यदि आपके पास कोई स्थानीय परिवर्तन नहीं है, जिसकी आपको परवाह है, तो एक सरलgit reset --hard <revision-to-checkout>आम तौर पर आपको समस्या के पिछले और नए संशोधन में लाने के लिए पर्याप्त होगा। बस कोशिश करें और याद रखें कि फ़ाइलों को अन्य नामों से नहीं बदला जाए जो केवल मामले में भिन्न हों यदि आप केस-असंवेदनशील फ़ाइल सिस्टम पर हैं, क्योंकि यह इस तरह की समस्याओं का कारण होगा।


14

@ ब्रायन कैंपबेल के पद पर विस्तृत जानकारी के लिए (क्योंकि रीसेट हार्ड काम नहीं किया था) मैं एक किनारे के मामले को इंगित करना चाहता हूं जो मुझे रोक रहा था।

मैंने एक फ़ाइल OldFileको एक अलग फ़ोल्डर में स्थानांतरित कर दिया और उसका नाम बदल दिया NewFile। मैंने तब फ़ाइल को ध्वजांकित किया assume-unchanged

यह मुझे शाखाओं को बदलने से रोक रहा था और धक्का देने या बचाने के लिए कोई रोक नहीं थी। समस्या यह थी कि assume-unchangedझंडा सेट करने से पहले मैंने इस फ़ाइल को एक नए नाम के साथ बदल नहीं दिया था । इसलिए मैंने इसे वापस सेट किया no-assume-unchanged, इसे प्रतिबद्ध किया, फिर इसे वापस सेट किया assume-unchangedऔर मैं फिर से शाखाएं बदल सका।


1
इस जवाब ने मुझे सही रास्ते पर ला दिया, धन्यवाद। मैंने "git ls-files -v | grep '^ [[: Lower:]] | | awk' {प्रिंट $ 2}" | xargs git अपडेट-इंडेक्स -नो-मान-अपरिवर्तित "" मान-अपरिवर्तित ध्वज को रीसेट करने के लिए। , तो मैं त्रुटियों के बिना रीसेट करने में सक्षम था।
ओकट्रोकेट

मुझे लगता है कि यह 'मान्य-अपरिवर्तित' चिह्नित किसी भी फ़ाइल पर भी लागू होता है, मेरे पास स्थानीय फ़ाइल में परिवर्तनों की अनदेखी करने के लिए एक ही मुद्दा था जिसका मूल नाम था। आपकी टिप्पणी ने मुझे याद दिलाया कि मैंने उस फ़ाइल को चिह्नित किया था, धन्यवाद!
जेक_

5
मेरी भी यही समस्या है। मूल रूप से "अपरिवर्तित मान" एक बुरी विशेषता है। एक बार जब आप इसका उपयोग करते हैं, तो यह अन्य शाखाओं की जांच करना बहुत मुश्किल बना देता है। यहां तक ​​कि अगर आप उपयोग करते हैं checkout -f, तो यह विफल हो जाएगा।
जॉन हेनकेल

13

सामान्यतया, इसका मतलब है कि आपकी स्थानीय फ़ाइलों में परिवर्तन हैं जो आपके स्थानीय भंडार के लिए प्रतिबद्ध नहीं हैं। आप इस स्टैकओवरफ़्लो प्रश्न को थोड़ा और विस्तार के लिए भी देख सकते हैं ।


11
इस सवाल से: "मैंने कोई स्थानीय परिवर्तन नहीं किया है ..."
चार्ल्स वुड

यह जीआईटी बग है या यह भ्रष्टाचार का भ्रष्टाचार है।
वारेन पी

11

मैं एक समान मुद्दा (विंडोज 10) देख रहा था: मैं चालू branchAथा और जाना चाहता था master। मेरे पास पहले तो कुछ अनकम्फर्टेबल बदलाव हुए, लेकिन git stashफिर git checkout -f masterभी मुझे मिल गया Entry 'fileName' not uptodate. Cannot merge

git status करने के लिए कुछ भी नहीं दिखा रहा था।

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


1
इस सवाल का यही एकमात्र हल है जो मेरे लिए काम करता है। मुझे .gitignoreफ़ाइल में त्रुटि हो रही थी ! हालांकि मैंने इसमें कोई बदलाव नहीं किया था, और git मुझे इसे "स्टैश" करने की अनुमति नहीं देगा (क्योंकि स्थानीय परिवर्तन नहीं हैं, डुह!)। इसलिए मैंने .gitignoreफाइल को रिपॉजिटरी ("बैकअप" के एक प्रकार के रूप में) में स्थानांतरित कर दिया और फिर एक किया git reset --hard, जिसने रिपॉजिटरी को एक सेंस स्टेट में "निश्चित" कर दिया।
नकाबपोश

git statusमुझे दिखाया कि कौन सी फ़ाइल बदली गई और संकेत दिया कि मैं git restore myFileइसे हटाने के बजाय उपयोग कर सकता हूं , जिसने काम किया।
नौमेनन

7

यह फ़ाइल अनुमतियों के साथ भी एक समस्या हो सकती है। Git उन्हें भी संस्करणित कर रहा है, जब तक कि विन्यास अन्यथा नहीं कहता। इस उत्तर को उन लोगों के लिए जोड़ रहे हैं जिनके पास लगभग समस्या नहीं है।


5

एक कोशिश के काबिल है:

क्या आप सेट कर सकते हैं, बस इस अपडेट के लिए, कॉन्फ़िगर पैरामीटरcore.trustctime को झूठा सेट करें ?

core.trustctime

यदि गलत है, तो सूचकांक और काम की प्रतिलिपि के बीच के समय अंतर को नजरअंदाज कर दिया जाता है; उपयोगी जब इनोड चेंज टाइम नियमित रूप से Git (फाइल सिस्टम क्रॉलर और कुछ बैकअप सिस्टम) के बाहर कुछ द्वारा संशोधित किया जाता है।


2
अच्छा लगता है, यह वास्तव में मेरे लिए तब काम करता है जब मैंने "git reset --merge" को चलाते समय उपरोक्त त्रुटि संदेश देखा। जब मैंने इस पैरामाटर को असत्य पर सेट किया, तो यह त्रुटि से मुक्त हो गया।
19

1
"Git मर्ज <फीचर> --no-ff --no- कमिट" का उपयोग करके किसी अन्य शाखा के साथ टकराव की जाँच करते समय मेरे लिए काम किया, फिर "git मर्ज --abort" के साथ फिर से शुरू। Xcode इस मामले में "गिट के बाहर कुछ" था। लगभग 10 साल बाद धन्यवाद!
राल्फोंसो

@ राल्फोंसो लगभग दस साल बाद, आपका स्वागत है :)
VonC

2

मेरा उत्तर जोड़ना क्योंकि अन्य में से कोई भी इसका उल्लेख नहीं करता है। मेरे मामले में यह तब हुआ जब मैंने -Nझंडे के साथ सूचकांक में नई फाइलें जोड़ीं, इसलिए केवल उनकी सामग्री को जोड़ने के बिना उन्हें सूचकांक में जोड़ दिया। इस अवस्था में, git stashइस त्रुटि को करता है।


0

मेरे पास एक ही त्रुटि थी, एक स्थिति के बाद जहां एक फ़ाइल के लिए नहींgit status कहा गया थाnew file: foo.cpp गया है कि मचान क्षेत्र में जोड़ा गया। "शीर्षक के लिए प्रतिबद्ध नहीं परिवर्तन" शीर्षक के तहत। बहुत अजीब है, यह आमतौर पर नहीं होता है।

समाधान: git add foo.cppऔर फिर फिर से git stashकाम किया।

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