क्या कोई कृपया एक साधारण उदाहरण प्रदान कर सकता है कि एक केंद्रीय रिपो को गिट पुश का असफल होने का कारण क्या होगा क्योंकि तेजी से आगे नहीं हो सका? केंद्रीय रिपो के राज्य को स्थानीय रेपो के राज्य को ऐसा करने के लिए क्या दिखने की आवश्यकता होगी? वास्तव में इसे देखने में परेशानी हो रही है ...इसका क्या अर्थ है कि एक गिट पुश तेजी से फहराया जा सकता है?
उत्तर
मैं तुम्हें इस समस्या को देख रहे हैं मान:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/Users/mayoff/t/test/central'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
यहाँ कैसे "गैर तेजी से आगे अद्यतन अस्वीकार कर दिया गया" समस्या होता है।
मान लें कि एलिस और बॉब एक परियोजना पर काम कर रहे हैं। उनमें से प्रत्येक के पास एक भंडार होता है, और वहां एक केंद्रीय भंडार होता है जो वे दोनों को धक्का देते हैं और खींचते हैं। प्रारंभ में, तीन खजाने इस तरह दिखेगा:
अब ऐलिस और बॉब दोनों कुछ काम करना।
इसके बाद, ऐलिस केंद्रीय रेपो के लिए उसे परिवर्तन धक्का:
बाद, यदि राहुल को पुश करने की कोशिश करता है प्रत्येक उनके स्थानीय भंडार के लिए एक अलग परिवर्तन करता है। सेंट्रल रेपो की मास्टर शाखा प्रतिबद्धता पर इंगित करती है 3. बॉब का पुश इसे 4 प्रतिबद्ध करने के लिए अपडेट करने का प्रयास करता है। चूंकि प्रतिबद्ध 4 में पूर्वजों के रूप में 3 प्रतिबद्ध नहीं होते हैं, इसलिए विलय की आवश्यकता होती है, लेकिन git push
असली विलय नहीं करता है। यह केवल "फास्ट-फॉरवर्ड" करता है, जहां नए मास्टर के पास पूर्वजों के रूप में पुराना मास्टर होता है। तो बॉब को त्रुटि मिलती है क्योंकि वह ऐसी चीज को धक्का देने की कोशिश कर रहा है जिसके लिए एक वास्तविक विलय की आवश्यकता है, न कि तेजी से आगे।
सफलतापूर्वक पुश करने के लिए, वैभव पहली बार लाने के लिए केंद्रीय रेपो से नए प्रतिबद्ध है:
और वह अपने परिवर्तन (प्रतिबद्ध # 4) के साथ ऐलिस परिवर्तन मर्ज करने के लिए है (प्रतिबद्ध # 3) , बनाने के लिए एक नया प्रतिबद्ध है कि दोनों पूर्वजों के रूप में करता है:
लाने और विलय दो आदेश (git fetch
द्वारा पीछा किया जा सकता है) या एक कमांड में (git pull
)।
अब बॉब सफलतापूर्वक धक्का दे सकता है, क्योंकि केंद्रीय रेपो देखता है कि नए मास्टर के पास पूर्वजों के रूप में पुराना मास्टर है।
सूचना है कि अब ऐलिस बॉब प्रतिबद्ध याद आ रही है। अगर वह अपने रेपो को और अधिक काम करती है और केंद्रीय रेपो से खींचने से पहले धक्का देने की कोशिश करती है, तो उसे गैर-फास्ट-फॉरवर्ड त्रुटि मिल जाएगी, और बॉब की तरह ही उसे ठीक करने के लिए उसे लाने और विलय करना होगा।
मुझे बस एहसास हुआ कि मेरे सभी तीर गलत तरीके से इंगित करते हैं। ओह अच्छा।उम्मीद है कि यह काफी स्पष्ट है। –
ठीक है, अब वे समय में विकास दिखाते हैं, न कि गिट पेड़। यह भी बुरा नहीं है। – erikbwork
स्थिरता कुंजी है। और आगे बढ़ने की दिशा में इशारा करते हुए वास्तव में कुछ लोगों के लिए अधिक आरामदायक हो सकता है। – araqnid
बस अपने स्थानीय को खींचने के बिना उसी शाखा पर केंद्रीय रेपो पर प्रतिबद्ध बनाएं। फिर स्थानीय रूप से प्रतिबद्ध करें और धक्का देने का प्रयास करें।
उत्कृष्ट सवाल! बहुत से लोग इसे समझ नहीं पाते हैं, लेकिन इसमें पाए गए अधिकांश प्रश्नों को अच्छी तरह से लिखा नहीं गया है। – erikbwork