2015-11-01 4 views
18

मैं GitHub पर एक नया भंडार की स्थापना की गई थी और इसे करने के लिए पुश करने के लिए कोशिश कर रहा था लेकिन Git मुझे यह कहते हुए एक त्रुटि दे रखा:गिट मुझे धक्का देने से पहले क्यों खींचना चाहता है?

error: failed to push some refs to...

मैं अंत में खींच पहले और उसके बाद आगे बढ़ाने और कहा कि काम करने की कोशिश की। पर क्यों?

+0

क्योंकि किसी ने पहले ही रिमोट रेपो में कुछ नए कामों को धक्का दिया है। अब गिट मानता है कि आपको उन नए बदलावों को लाने की ज़रूरत है, उन्हें अपने परिवर्तनों में विलय करें और फिर परिणामस्वरूप परिवर्तन – user3159253

उत्तर

29

पर रखा गया है आपने बताया कि आप एक नया संग्रह बना रहे हैं।

जबकि उत्तर और टिप्पणियां भी सच हैं, तो संभवतः आप एकमात्र व्यक्ति हैं जो भंडार के साथ बातचीत कर रहे हैं। आपको खींचने की आवश्यकता थी क्योंकि ने गिटहब (this is likely the tutorial you followed) पर एक README के साथ भंडार आरंभ किया था।

यदि आपने रीडमी के साथ रिपॉजिटरी को प्रारंभ नहीं किया है, जिसका अर्थ है कि गिटहब ने 'README.md' की पहली प्रतिबद्धता नहीं बनाई है, तो आपके पास एक पूरी तरह खाली रिकॉजिटरी होगी जिसे आप सीधे दबा सकते हैं।

कारण है कि GitHub उस विकल्प सबसे बहुत आसानी से एक पुल/क्लोन कर रहे हैं और होने से GitHub पर भंडार की स्थापना के बाद चलते रहने के लिए (जैसे कि अपने आप को के रूप में) उपयोगकर्ताओं को, जो एक नई परियोजना शुरू कर रहे हैं की सहायता के लिए की संभावना है है उस प्रारंभिक प्रतिबद्धता, जिससे आप नई फ़ाइलों को त्वरित रूप से जोड़ सकते हैं और धक्का दे सकते हैं।

इसके अतिरिक्त, एक README के ​​साथ एक भंडार आरंभ करके, आप एक मास्टर शाखा क्लोन और ट्रैकिंग फ़ाइलें शुरू करने के लिए तैयार करना होगा। जबकि एक पूरी तरह से खाली भंडार पर आप सूचनाएं Git से की तरह प्राप्त होगा:

warning: You appear to have cloned an empty repository. 

आरंभ के बिना, आप भी बाद में धक्का करना होगा अपनी पहली पहली बार स्पष्ट रूप से करता है git push origin master साथ में महारत हासिल करने, के रूप में Git विनम्रता बता देंगे आप:

No refs in common and none specified; doing nothing. 
Perhaps you should specify a branch such as 'master'. 
Everything up-to-date 

संक्षेप में, यह था कि पहले प्रतिबद्ध (आपका करता देख सकते हैं और आप पहली बार README प्रतिबद्ध देखेंगे) है कि आप को आगे बढ़ाने से रोका अपने loc रूप खींच के बिना गिटहब पर भंडार के साथ अल भंडार सिंक में नहीं है।

+1

पर धक्का दें, क्या उनके लिए उस रीडेमे फ़ाइल को मिटाने के लिए इतिहास को फिर से लिखना संभव होगा और फिर खींचना नहीं होगा? – boot4life

+0

@ boot4life अच्छी तरह से, फिर से लिखने की तुलना में 'ओवरराइट' की तरह, मान लीजिए कि किसी ने खींचा नहीं है और रीडेमे फ़ाइल केवल रिमोट पर है (i।ई गिटहब) तो कोई पुश को मजबूर कर सकता है, http://stackoverflow.com/a/12610763/4512948 देखें, लेकिन यह भी देखें ** यदि आप सहयोग कर रहे हैं तो यह अच्छा क्यों नहीं है **: https: //developer.atlassian। कॉम/ब्लॉग/2015/04/बल-साथ-पट्टा/ ** टीएल; डीआर ** आप मूल रूप से जो कुछ भी करते थे उसे अनदेखा करते हैं और जो कुछ भी आपके पास है उसे ओवरराइट करते हैं, जो ठीक है अगर आपको पता है कि वहां नहीं है आप जो कुछ भी चाहते हैं। अन्यथा आप सभी के लिए इतिहास बदल रहे हैं। – matrixanomaly

6

ऐसा इसलिए है कि किसी और द्वारा किए गए समांतर संपादन और फिर चेक इन करने के लिए विलय और परीक्षण के लिए आपके विकास पर्यावरण में लाया जाता है। इस तरह, समांतर, गैर-एकीकृत परिवर्तनों की संख्या को प्रबंधित करने योग्य न्यूनतम

3

आपके मामले में, गिटहब ने स्वचालित रूप से पहली प्रतिबद्धता (अक्सर README.md और LICENSE फ़ाइलें) बनाई है और अपनी प्रतिबद्धताओं को धक्का देने के लिए, आपको पहले गिटहब की प्रतिबद्धता को खींचना (लाने और विलय करना होगा)।

2

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

+2

पुल एक विलय करता है - यह एक तेज़ आगे नहीं है। फास्ट फॉरवर्ड होता है जब आप धक्का देते हैं। – bdsl

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