2009-08-08 10 views
50

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

मैं कोशिश की है:

Git

--hard रीसेट और मैं एक ही समस्या

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

मैंने "गिट स्टैश" के बाद भी "गिट स्टैश" की कोशिश की है। नही जाओ।

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

+0

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

+0

डिट्टो "* काम करने के लिए एकमात्र चीज अपमानजनक फ़ाइल को हटा रही है और फिर एक गिट खींचने का प्रयास करें। *"। मेरे लिए, कम से कम एक फ़ाइल गिट में नहीं थी; यह वाइल्डकार्ड नियम द्वारा गठित किया गया था। यकीन नहीं है कि वे अवरोधक क्यों थे, हालांकि। – ruffin

उत्तर

15

आम तौर पर बोलते हुए, इसका मतलब है कि आपके स्थानीय फाइलों में बदलाव हैं जो आपके स्थानीय भंडार के लिए प्रतिबद्ध नहीं हैं। आप थोड़ा अधिक विस्तार के लिए यह stackoverflow question भी देख सकते हैं।

+1

प्रश्न से: _ "मैंने कोई स्थानीय परिवर्तन नहीं किया है ..." _ –

1

वर्थ एक कोशिश:

आप सेट कर सकते हैं, बस इस अपडेट के लिए, गलत पर config parameter core.trustctime सेट?

core.trustctime 

If false, the ctime differences between the index and the working copy are ignored; useful when the inode change time is regularly modified by something outside Git (file system crawlers and some backup systems).

+0

अच्छा लगता है, यह वास्तव में मेरे लिए काम करता है जब मैंने "गिट रीसेट --merge" चलाते समय उपरोक्त त्रुटि संदेश देखा। जब मैं इस पैरामीटर को झूठी पर सेट करता हूं, तो यह त्रुटि से छुटकारा पाता है। – DemitryT

53

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

बस इस तरह:

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

$ git stash 
$ git pull 
$ git stash pop 
+1

@yuit: अगर यह आपके लिए हल हो गया है, तो आपको यह जवाब स्वीकार करना चाहिए – kynan

+9

मूल प्रश्न से: _ "मैंने" गिट स्टैश "के बाद भी" गिट स्टैश "की कोशिश की है। नहीं।" _ –

20

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

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

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

5

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

7

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

मैंने एक फ़ाइल को OldFile एक अलग फ़ोल्डर में स्थानांतरित कर दिया था और इसका नाम बदलकर NewFile रखा था। मैंने फ़ाइल को assume-unchanged के रूप में चिह्नित किया।

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

+0

यह उत्तर डाल दिया गया मुझे सही रास्ते पर, धन्यवाद। मैंने "git ls-files -v | grep '^ [[: low:]]' | awk '{print $ 2}' | xargs गिट अद्यतन-अनुक्रमणिका --no-assume-unchanged" मान लिया-अपरिवर्तित ध्वज रीसेट करने के लिए , तो मैं त्रुटियों के बिना - रीसेट करने में सक्षम था। – ocroquette

+0

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

+2

मुझे एक ही समस्या है। असल में "अपरिवर्तित मानें" एक बुराई विशेषता है। एक बार जब आप इसका इस्तेमाल कर लेंगे, तो यह अन्य शाखाओं की जांच करना बहुत मुश्किल हो जाता है। यहां तक ​​कि यदि आप 'चेकआउट-एफ' का उपयोग करते हैं, तो यह असफल हो जाएगा। –

2

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

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

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

+0

यह इस प्रश्न का एकमात्र समाधान है जो मेरे लिए काम करता है। मुझे '.gitignore' फ़ाइल के साथ त्रुटि मिल रही थी! भले ही मैंने इसमें कोई बदलाव नहीं किया था, और गिट मुझे इसे "छेड़छाड़" करने की अनुमति नहीं देगा (क्योंकि कोई स्थानीय परिवर्तन नहीं है, दुह!)। इसलिए मैंने भंडार के बाहर '.gitignore' फ़ाइल को स्थानांतरित किया (एक प्रकार के "बैकअप" के रूप में) और उसके बाद' गिट रीसेट - हार्ड 'किया, जो एक सौहार्दपूर्ण स्थिति में भंडार को "निश्चित" करता था। –

1

अगर आप कुछ फ़ाइलों को अनदेखा करने की अनुक्रमणिका को अपडेट करते हो सकता है:

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 

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

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