मैं एक खाली वचन क्यों नहीं दे सकता?


35
  git commit --amend --allow-empty

फिर

  git push origin master

git ने कहा कि

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
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.

क्यूं कर? इसे कैसे ठीक करें?

git 

जवाबों:


56

मुद्दा यह नहीं है कि आप एक खाली प्रतिबद्ध को आगे बढ़ा रहे हैं ।
यह एक अलग प्रतिबद्ध (एक अलग SHA1 के साथ एक) को धक्का देने के बारे में है जो पहले से ही धकेल दिया गया है।
यही वह है git commit --amend: इसने अंतिम प्रतिबद्ध को संशोधित किया, यह एक नया निर्माण नहीं करता है।

इसका मतलब है कि आप एक अलग इतिहास को आगे बढ़ा रहे हैं, जो पहले से ही क्लोन हो सकता है।
यदि आप सुनिश्चित हैं कि समस्या नहीं होगी, तो आपको पुश को मजबूर करने की आवश्यकता है:

git push -f origin master

क्या आपको करना चाहिए:

git commit --allow-empty

आपने एक नई (खाली) प्रतिबद्धता बनाई होगी , जिसे आप बिना किसी मुद्दे के धकेल सकते थे।


5

यदि आप Github पर पुल अनुरोध बनाना चाहते हैं। आप ऐसा कर सकते हैं:

git commit --allow-empty -m "make pull request"

फिर बिना किसी बदलाव के साथ पुल अनुरोध बनाएं।


3

स्वीकृत उत्तर को स्पष्ट करने के लिए, क्योंकि मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है:

जब आप उपयोग करते हैं

git commit --amend

यह करता है एक नया प्रतिबद्ध पैदा करते हैं। हालाँकि, यह इसे वर्तमान प्रतिबद्ध के लिए नहीं जोड़ता है, यह इसे वर्तमान प्रतिबद्ध के माता-पिता के लिए जोड़ता है। नेत्रहीन, यह एक कांटा की तरह दिखेगा।

  O (old commit)
 /
O-O (amended commit)

Git इसे दूरस्थ से एक विचलन के रूप में व्याख्या करता है। यही कारण है कि यह आपको मजबूर किए बिना इसे धकेलने नहीं देगा।


0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.