2013-02-28 9 views
61

मैंने इस पर सभी समान प्रश्न पढ़े हैं; ऐसा लगता है कि निम्नलिखित में से कोई भी काम किया है:गिट पुल संभव नहीं है, अनमर्ज फ़ाइलें

Delete offending files 
git reset --hard HEAD 
git stash 
git pull 

लगभग हर संयोजन, परिवर्तन stashing और रिपोजिटरी से खींच, unmergable फाइलों में परिणाम है। मैं सभी स्थानीय परिवर्तनों को त्यागना चाहता हूं और केवल रिमोट का उपयोग करना चाहता हूं, लेकिन मैं फिर से क्लोन नहीं कर सकता (डेवलपर के साथ बैंडविड्थ और इंटरनेट उपयोग सीमाएं ऐसा करने की कोशिश कर रही हैं)। मैं यह कैसे करु?

बस की कोशिश की:

git stash 
git pull 

भी काम नहीं किया।

अधिक जानकारी

वहाँ एक स्थानीय प्रतिबद्ध है, और नदी के ऊपर एक साथ ही प्रतिबद्ध है। इस प्रकार मैंने git pull --rebase की कोशिश की है लेकिन यह अभी भी ठीक से काम नहीं कर रहा है ... इससे मुझे त्रुटियां मिलती हैं - "एक अनसुलझा संघर्ष के कारण बाहर निकलना"। अगर मैं git stash, git reset --hard HEAD, git pull --rebase करते हैं, मैं त्रुटि "पुल संभव, मर्ज ना किए गए परिवर्तन नहीं है ..."

उत्तर

146

कहो दूरस्थ origin है और शाखा master है, और कहते हैं कि आप पहले से ही master की जाँच की है, निम्नलिखित कोशिश कर सकते हैं रिमोट शाखा

चेतावनी: जैसा कि टिप्पणी में कहा गया है, यह आपके स्थानीय परिवर्तन फेंक होगा और जो कुछ मूल पर है के साथ ऊपर लिख।

या आप पाइपलाइन का उपयोग कर सकते अनिवार्य रूप से भी ऐसा ही करने के लिए आदेश:

git fetch <remote> 
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>) 
git reset --hard 

संपादित करें: मैं कुछ समय के लिए क्यों यह काम करता है समझाने के लिए करना चाहते हैं।

.git फ़ोल्डर किसी भी संख्या में भंडारों के लिए प्रतिबद्ध हो सकता है। चूंकि प्रतिबद्ध हैश वास्तव में प्रतिबद्धता की सामग्री के लिए एक सत्यापन विधि है, न केवल एक यादृच्छिक रूप से जेनरेट किया गया मान, इसका उपयोग भंडारों के बीच प्रतिबद्ध सेट से मेल खाने के लिए किया जाता है।

एक शाखा किसी दिए गए हैश के लिए सिर्फ एक नामांकित सूचक है। यहाँ एक उदाहरण सेट है:

$ find .git/refs -type f 
.git/refs/tags/v3.8 
.git/refs/heads/master 
.git/refs/remotes/origin/HEAD 
.git/refs/remotes/origin/master 
इस फाइलों में से

प्रत्येक एक हैश ओर इशारा करते हुए शामिल एक प्रतिबद्ध:

$ cat .git/refs/remotes/origin/master 
d895cb1af15c04c522a25c79cc429076987c089b 

ये आंतरिक Git भंडारण तंत्र के लिए सभी कर रहे हैं, और कार्यशील निर्देशिका की स्वतंत्र रूप काम । निम्न करके:

git reset --hard origin/master 

Git एक ही हैश मान होता है मूल/मास्टर अंक के लिए कम से वर्तमान शाखा इंगित करेंगे। फिर यह उस हैश पर फ़ाइल संरचना/सामग्री से मेल खाने के लिए कार्यशील निर्देशिका को मजबूती से बदल देता है।

काम पर इस आगे जाना है और बाहर की कोशिश निम्नलिखित देखने के लिए:

git checkout -b test-branch 
# see current commit and diff by the following 
git show HEAD 
# now point to another location 
git reset --hard <remote>/<branch> 
# see the changes again 
git show HEAD 
+0

द्वारा सुझाव के अनुसार टीम गिट रिबेस --बॉर्ट' और 'गिट पुल - रीबेस' को आजमाने के लिए टीम के सदस्य को बता रहा हूं। ऐसा इसलिए मुझे नहीं पता कि यह काम करता है - लेकिन मैं एक अच्छे समाधान के लिए उभरा हूं –

+3

@ टिमोथीव यह सच है, लेकिन मुझे लगता है कि इस सवाल के आधार पर मुझे लगाया गया था। –

+1

हाल ही में अनुमोदित संपादन से शुरुआत में भारी चेतावनी जोड़ने से, यह इंगित करना है कि यह पहले से ही उल्लेख किया गया है: "फिर [गिट] उस हैश पर फ़ाइल संरचना/सामग्री से मेल खाने के लिए कार्यशील निर्देशिका को मजबूती से बदलता है।" लेकिन अनुमान लगाओ कि पर्याप्त स्पष्ट नहीं था। –

3

मैं एक ऐसी ही स्थिति में

git checkout -f <branch> 

साथ भाग्यशाली रहे हैं।

मान लिया जाये कि आप कोई भी परिवर्तन आपके पास फेंक पहले git status के उत्पादन में जाँच करना चाहते हैं http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html

Undo delete in GIT

1

। किसी भी फ़ाइल के लिए जो इसके आगे "अनमोल" कहता है, git add <unmerged file> चलाएं। फिर git reset --hard के साथ पालन करें। यह अनचाहे फ़ाइलों को छोड़कर किसी भी स्थानीय परिवर्तन से छुटकारा पड़ेगा।

+0

कुछ और जानकारी जोड़ा गया है, यह अभी तक सही काम नहीं कर रहा है –

+0

ओह, ठीक है। यह "अनमोल" नहीं कह सकता है। यह "दोनों संशोधित" या शायद एक या दो अन्य चीजें भी कह सकता है। 'गिट स्थिति 'का आउटपुट क्या है? –

+0

http://prntscr.com/ufyqw –

3

हल, निम्न आदेश सेट का उपयोग:

git reset --hard 
git pull --rebase 
git rebase --skip 
git pull 

चाल परिवर्तन rebase करने के लिए है ... हम कुछ परेशानी रिबेसिंग एक तुच्छ प्रतिबद्ध था, और इसलिए हम बस Git --skip rebase का उपयोग कर इसे छोड़ दिया (फ़ाइलों की प्रतिलिपि बनाने के बाद)।

git fetch origin 
git reset --hard origin/master 

यह मूलतः सिर्फ वर्तमान शाखा लेता है और का HEAD को यह बताते हैं:

1

मैं Git के साथ हल किया गया स्थानीय रूप से मर्ज ना किए गए फ़ाइल को हटा दें।

$ git rm <the unmerged file name> 
$ git reset --hard 
$ git pull --rebase 
$ git rebase --skip 
$ git pull 
Already up-to-date. 

जब मैं Git भेज बाद में प्रतिबद्ध:

$ git commit . -m "my send commit" 
On branch master 
Your branch is up-to-date with 'origin/master'. 
nothing to commit, working directory clean 
0

रयान स्टीवर्ट के जवाब लगभग वहाँ था।

  • भागो git status: उस मामले में जहां आप वास्तव में नहीं अपने स्थानीय परिवर्तनों को हटा करना चाहते हैं, वहाँ एक कार्यप्रवाह आप मर्ज का उपयोग कर सकते है। यह आपको अनमोल फाइलों की एक सूची देगा।
  • (हाथ से आदि) उन्हें मर्ज
  • भागो git commit

Git एक नया में सिर्फ मर्ज के के लिए प्रतिबद्ध होगा प्रतिबद्ध। (मेरे मामले में, मेरे पास डिस्क पर अतिरिक्त अतिरिक्त फ़ाइलें थीं, जिन्हें उस प्रतिबद्धता में नहीं रखा गया था।)

गिट फिर विलय को सफल मानता है और आपको आगे बढ़ने की अनुमति देता है।

0

क्या तुमने कभी आप दोनों संशोधित/मर्ज ना किए गए फ़ाइलों मर्ज संघर्ष की वजह से git pull चलाने के लिए (अनुमति नहीं दे रहा एक git fetch और फिर Git चलाने के बाद इस मुद्दे को प्राप्त करने के लिए होता है, और आप निराश बनाने के लिए है, यह जीत लिया ' आपको फ़ाइल में कोई भी विवाद चिह्न नहीं दिखाता है क्योंकि यह अभी तक विलय नहीं हुआ है)। यदि आप अपना काम खोना नहीं चाहते हैं, तो आप निम्न कार्य कर सकते हैं।

फ़ाइल को चरणबद्ध करें।

$ git add filename 

फिर स्थानीय परिवर्तनों को छूएं।

$ git stash 

पुल और अपने कार्यशील निर्देशिका अद्यतन

$ git pull 

अपने स्थानीय संशोधित फ़ाइल (अगर यह है, अन्यथा यह हल कर सकते हैं Git अपने आप मर्ज जाएगा)

$ git stash pop 

आशा है कि यह मदद मिलेगी बहाल।

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