2011-06-27 16 views
10

मैंने एक स्वच्छ कार्य निर्देशिका पर अपने अपस्ट्रीम से git pull किया और यह मुझे विलय विवादों के साथ प्रस्तुत करता है। मैंने मैन्युअल रूप से उन्हें एक घंटे बिताया और सोच रहा था कि मैंने कुछ खराब कर दिया है और यह फिर से हुआ।स्वच्छ निर्देशिका से गिट पुल ने विवादों को विलय कर दिया है

क्या यह गिट में एक बग है? मुझे इसके बारे में बहुत कुछ पता है, इसलिए मैं यह स्वीकार करने के लिए पूरी तरह से तैयार हूं कि मैंने इसे स्वयं किया है।

$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ git pull 
Auto-merged xxxx/xxxx/xxxx.xxx 
CONFLICT (content): Merge conflict in xxxx/xxxx/xxxx.xxx 
Automatic merge failed; fix conflicts and then commit the result. 

मैं साथ सोलारिस 11 एक्सप्रेस का उपयोग कर रहा हूँ:

यहाँ मेरी छोटा निर्गम (इसके बारे में 9 फ़ाइलों का क्या होगा, लेकिन मैं स्थान बचाने के लिए चाहते थे, और फ़ाइल नाम मासूम की रक्षा करने के लिए बदल दिया गया है) है पैकेज डिफ़ॉल्ट गिट। Git pull fails: You have unstaged changes. Git status: nothing to commit (working directory clean) है, जो सबसे करीब लगता है, लेकिन एक नाकाफी जवाब है:

$ uname -a 
SunOS xxxx 5.11 snv_151a i86pc i386 i86pc Solaris 
$ git --version 
git version 1.5.6.5 
$ pkg list git 
NAME (PUBLISHER)        VERSION   STATE  UFOXI 
developer/versioning/git      1.5.6.5-0.151.0.1 installed ----- 

मैं इस सवाल पाया।

मैं अपने पूरे भंडार को हटाने और नया क्लोन बनाने के बिना इसे कैसे प्राप्त कर सकता हूं?

उत्तर

15

आपकी कार्य निर्देशिका साफ़ हो सकती है, लेकिन आपके पास एक या अधिक काम है जो आपने स्थानीय रूप से किया है जो सर्वर पर नहीं हैं। जब आप खींचते हैं, तो गिट इन स्थानीय गतिविधियों को सर्वर पर विलय करने का प्रयास करता है, लेकिन चूंकि वे कोड के उसी क्षेत्र को संशोधित करते हैं, तो वे संघर्ष करते हैं।

आपके विकल्प यहाँ मूल रूप से करने के लिए नीचे उबाल:

  1. Fix the conflicts. उस Git बताओ कि विवादित परिवर्तन को संभालने के लिए, और आगे बढ़ने।
  2. git pull --rebase के साथ संघर्षों को दोबारा ठीक करें और ठीक करें। यह 1 से बहुत अलग नहीं है, लेकिन यदि आपके परिवर्तन कभी प्रकाशित नहीं हुए हैं (यानी, उन्हें कभी भी कभी धक्का नहीं दिया गया है), तो यह आपको क्लीनर (रैखिक) इतिहास प्राप्त कर सकता है।
  3. अपने स्थानीय परिवर्तनों को छोड़ दें और git reset --hard remotename/remotebranch के साथ रिमोट का उपयोग करें। यह आपके द्वारा स्थानीय रूप से किए गए किसी भी बदलाव को खो देगा लेकिन कहीं और नहीं धकेल दिया जाएगा।
+1

मेरे पास उस शाखा पर कोई स्थानीय काम नहीं है, लेकिन # 3 चाल है, धन्यवाद। – bahamat

+4

उपयोगी उत्तर, मुझे खरबूजे से बाहर निकलने में मदद मिली। मेरे मामले में, मैंने एक शाखा पर 'गिट रिबेस मास्टर' चलाया था। तब मेरे ऊपर वर्णित विलय संघर्ष था। 'गिट मर्ज --बॉर्ट' और फिर अपने 'गिट पुल --rebase' के साथ हल किया गया। धन्यवाद! – wndxlori

0

खींचें, मर्ज विवादों को हल करें और प्रतिबद्ध करें? यहां तक ​​कि यदि आपके पास एक साफ काम करने वाली निर्देशिका है, यदि आपने कुछ काम किया है, तो आने वाले परिवर्तनों के साथ संघर्ष कर रहा है, तो आपको एक विलय संघर्ष मिलता है।

0

bdonlan जवाब को जोड़ने से आप कुछ करता (अपने स्थानीय भंडार पर) हैं तो, यह भी हो सकता है, लेकिन दूरदराज के भंडार आगे है (कुछ प्रगति अपने स्थानीय प्रतिबद्ध फ़ाइलों की तुलना करने के लिए किया था)।

जब मैं उन संघर्षों के कारण धक्का नहीं डाल सका और खींच नहीं पाया तो मैं बस अटक गया।

' rebase' करने के लिए या कोई भाग्य के साथ 'रीसेट --hard' की कोशिश की।

मेरे लिए एकमात्र समाधान काम करना एक प्रतिबद्धता और खींचना था;

अगले चरणों का पालन करें:

चेतावनी: यह एक विनाशकारी आपरेशन जो आप अपने पिछले बदलती है, जिससे बैकअप अपने परिवर्तनों को पहली बार इस कोड से हारने के कारण होगा है!

    अपने स्थानीय भंडार पर
  1. प्रयोग करें 'Git लॉग' और प्रतिबद्ध करने के लिए इस तुलना रिमोट पर लॉग ऑन करें - समझने के लिए जो अपने प्रतिबद्ध में से एक धक्का दिया नहीं किया गया था
  2. प्रयोग करें 'Git --hard रीसेट 'पिछली बार दूरदराज के भंडार के लिए अपने कोड फिट करने के लिए वापस जाने के लिए (मैं इस्तेमाल किया' Git --hard HEAD^ रीसेट 'जानबूझ कर कम करने के लिए मेरे पिछले प्रतिबद्ध)
  3. अब' Git खींच 'काम करेगी; रिमोट सर्वर से नवीनतम कोड प्राप्त करने के लिए इसका उपयोग करें
संबंधित मुद्दे