git - मैं गिट पुश को सही तरीके से कैसे मजबूर करूं?




push git-push (5)

मैंने एक दूरस्थ गैर-बेयर "मुख्य" रेपो स्थापित किया है और इसे अपने कंप्यूटर पर क्लोन किया है। मैंने कुछ स्थानीय परिवर्तन किए, मेरे स्थानीय भंडार को अपडेट किया, और परिवर्तन को मेरे रिमोट रेपो में वापस धकेल दिया। चीजें उस बिंदु तक ठीक थीं।

अब, मुझे रिमोट रेपो में कुछ बदलना पड़ा। तब मैंने अपने स्थानीय रेपो में कुछ बदल दिया। मुझे एहसास हुआ कि रिमोट रेपो में बदलाव की आवश्यकता नहीं थी। तो मैंने अपने स्थानीय रेपो से अपने रिमोट रेपो में git push देने की कोशिश की, लेकिन मुझे एक त्रुटि मिली:

इतिहास खोने से आपको रोकने के लिए, गैर-फास्ट-फ़ॉरवर्ड अपडेट अस्वीकार कर दिए गए थे फिर से धक्का देने से पहले दूरस्थ परिवर्तनों को मर्ज करें। विवरण के लिए git push --help 'फास्ट-फॉरवर्ड' अनुभाग देखें।

मैंने सोचा कि शायद एक

git push --force

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

जैसा कि मैंने जवाबों में से एक को टिप्पणियों में उल्लेख किया है :

[मैंने] मजबूर करने की कोशिश की, लेकिन परिवर्तनों को सहेजने के लिए मास्टर सर्वर पर वापस जाने पर, मुझे पुरानी स्टेजिंग मिलती है। इस प्रकार, जब मैं रिपोजिटरी करता हूं वही नहीं होता है। और जब मैं फिर से गिट पुश का उपयोग करने की कोशिश करता हूं, तो मुझे एक ही त्रुटि मिलती है।

मैं इस समस्या को कैसे हल कर सकता हूं?


अगर मैं अपनी स्थानीय शाखा ए पर हूं, और मैं पुश स्थानीय शाखा बी को मूल शाखा सी को मजबूर करना चाहता हूं सीआई निम्नलिखित वाक्यविन्यास का उपयोग कर सकता है:

git push --force origin B:C

इस निम्न आदेश का प्रयोग करें:

git push -f origin master

बस करो:

git push origin <your_branch_name> --force

या यदि आपके पास एक विशिष्ट रेपो है:

git push https://git.... --force

यह आपकी पिछली प्रतिबद्धताओं को हटा देगा और आपके वर्तमान को दबाएगा।

यह उचित नहीं हो सकता है, लेकिन अगर कोई इस पृष्ठ पर ठोकर खाता है, तो सोचा कि वे एक साधारण समाधान चाहते हैं ...

लघु झंडा

यह भी ध्यान रखें कि -f लिए छोटा है, इसलिए

git push origin <your_branch_name> -f

काम भी करेगा।


मैं वास्तव में सिफारिश करता हूं:

दूसरे शब्दों में, मुख्य सर्वर और स्थानीय कंप्यूटर दोनों से एक नंगे रेपो को सुलभ रखें, ताकि एक अपस्ट्रीम रेपो को / से खींचें / खींचें।


सबसे पहले, मैं सीधे "मुख्य" रेपो में कोई बदलाव नहीं करता। यदि आप वास्तव में "मुख्य" रेपो चाहते हैं, तो आपको केवल इसे धक्का देना चाहिए, इसे सीधे कभी नहीं बदला जाना चाहिए।

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





git-non-bare-repository