Git पुश विफल रहा, "गैर-तेज़ फ़ॉरवर्ड अपडेट अस्वीकार कर दिए गए"


99

मैंने GIT ऑनलाइन के माध्यम से अपनी GIT रिपॉजिटरी संपादित की है। अपने स्थानीय कोड परिवर्तनों को धकेलने के बाद, मुझे एक त्रुटि मिली:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

मैं इसे कैसे ठीक करूं?


जवाबों:


137

पहले परिवर्तन खींचो:

git pull origin branch_name

1
यदि वह आपकी समस्या का समाधान नहीं करता है, तो सुनिश्चित करें कि आप उसी शाखा पर जोर दे रहे हैं जिस पर आप वर्तमान में काम कर रहे हैं। जाँच करें कि आप किस शाखा में "स्थिति" के साथ हैं।
afilina

1
इस आदेश ने मुझे काम दिया, हालाँकि मैं जानना चाहता हूँ, यह क्यों नहीं है git pull:? रिमोट के बराबर है origin, इसलिए यह वास्तव में चलता है git pull origin:। क्या यह सभी शाखाओं को अद्यतन नहीं करना चाहिए?
कारलेन किशमिरन

83

यदि आप सुनिश्चित हैं कि आप पुश करना चाहते हैं, तो - अपनी कमांड लाइन में जोड़ें। उदाहरण का उपयोग करें git push origin --force(मैं कमांड लाइन की अनुशंसा करता हूं क्योंकि आपको कमांड लाइन के साथ अन्य उपयोगकर्ताओं से बहुत अधिक समर्थन मिलेगा। यह भी स्मार्टगिट के साथ संभव नहीं हो सकता है।) अधिक जानकारी के लिए इस साइट को देखें: http://help.github.com/ रिमोट /


8
--फोर्स आपकी समस्याओं को हल करेगा लेकिन संभावित रूप से दूसरों को नुकसान पहुंचाएगा। इसका उपयोग केवल बहुत सावधानी (और ज्ञान) के साथ किया जाना चाहिए
schoetbi

7
-1 क्योंकि बलपूर्वक धक्का देना आम तौर पर एक भयानक विचार है।
joshin4colours

6
+1 क्योंकि 5 लोग -1 देने के लिए @ joshin4colours से सहमत थे। लेकिन जब बल धक्का हमेशा सबसे अच्छा विचार नहीं होता है (जो आपके धक्का से इनकार करके काफी स्पष्ट हो जाता है), अगर यह 100% बुरा विचार था, तो विकल्प मौजूद नहीं होगा। यहां मैट का सुझाव निश्चित रूप से दूसरों के लिए उपयोगी हो सकता है।
user1271772

2
--forceयदि आप केवल उस शाखा का उपयोग कर रहे हैं, तो उपयोग करने के लिए स्वतंत्र महसूस करें । हालाँकि अन्य डेवलपर्स के साथ शाखा साझा करते समय यह समस्याएँ पैदा करता है।
रॉबर्ट ब्रिसिटा

22

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

git pull --rebase

अब, आप रिमोट को पुश कर सकते हैं

git push 

अधिक जानकारी के लिए Git रिबेस और अध्याय 3.6 Git ब्रांचिंग - रिबासिंग पर एक नज़र डालें ।


2
मेरे मामले में git pull --rebaseसमाप्त होता हैThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

मुझे एक ही त्रुटि का सामना करना पड़ा, बस कमांड में "--फोर्स" जोड़ें , यह काम करता है

git push origin master --force

6
क्या इसके परिणाम हैं?
jayunit100

8
दूसरों का नुकसान उठाना।
बजे जियोवानी टॉरल्डो

1
मेरे पास एक विषम स्थिति थी जहां यह वही है जो मैं करना चाहता था ... कुछ नए के साथ एक बस-निर्मित दूरस्थ मास्टर शाखा की सामग्री को उड़ा दें। इससे मेरी समस्या हल हो गई। हालांकि यह सभी के लिए समाधान नहीं है, --forceसहायक हो सकता है।
ब्रैड

1
मुझे नहीं लगता कि यह जवाब 6 बार मतदान के योग्य है। यह प्रदान की गई समस्या का एक वैध समाधान है, हालांकि, लेखक उन परिस्थितियों के बारे में थोड़ा अधिक वर्णनात्मक हो सकता है जिनके लिए यह कमांड उपयोगी होगा। अगर यह ध्यान देने योग्य है क्योंकि यह लिखने लायक था (- के लिए कार्यक्षमता)
Aiden Strydom

5

मुझे भी यही समस्या हुई है।
इसका कारण यह था, कि मेरी स्थानीय शाखा किसी तरह रिमोट समकक्ष को ट्रैकिंग खो चुकी थी।

उपरांत

git branch branch_name --set-upstream-to=origin/branch_name
git pull

और विलय के संघर्षों को हल करते हुए, मैं पुश करने में सक्षम था।


ऐसा लगता है कि आपने दूरस्थ शाखा में परिवर्तन को याद किया है
ozma

5

आप -फोर्स-इन-लीज को कमांड में जोड़ सकते हैं , यह काम करेगा।

git push --force-with-lease

-फोर्स विनाशकारी है क्योंकि यह बिना शर्त स्थानीय रूप से जो कुछ भी है उसके साथ रिमोट रिपॉजिटरी को ओवरराइट कर देता है। लेकिन -फोर्स-विद-लीज सुनिश्चित करता है कि आप दूसरे के काम को अधिलेखित न करें।

अधिक जानकारी यहाँ देखें ।


1

(एक) नेटबीन्स 7.1 के लिए समाधान: एक पुल का प्रयास करें। यह भी शायद विफल हो जाएगा। अब लॉग पर एक नज़र डालें (वे आमतौर पर अब आईडीई में दिखाए गए हैं)। एक / अधिक पंक्ति कह रही है:

"इस फ़ाइल के कारण खींच लिया विफल:"

उस फ़ाइल को खोजें, उसे हटाएं (पहले एक बैकअप बनाएं)। आमतौर पर यह एक .itignore फाइल है, जिससे आप कोड नहीं हटाएंगे। पुश को फिर से करें। सब कुछ अब ठीक काम करना चाहिए।


1

--rebaseविकल्प का उपयोग करके मेरे लिए काम किया।

  • git pull <remote> <branch> --rebase

फिर रेपो पर धकेल दें।

  • git push <remote> <branch>

उदाहरण के लिए

git pull origin master --rebase

git push origin master


0

मैं एक ही समस्या है। मैंने साथ हल किया

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
ओपी स्थानीय कोड परिवर्तनों को आगे बढ़ाने के बारे में कहता है। checkoutइन परिवर्तनों को अधिलेखित कर देगा या कम से कम उन्हें पुश में शामिल नहीं करेगा।
trejder

0

इसी से मेरा काम बना है। यह यहाँ git प्रलेखन में पाया जा सकता है

यदि आप अपनी इच्छित शाखा पर हैं तो आप यह कर सकते हैं:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

एक ही समस्या का सामना करना पड़ा, इसे हल करने के लिए, निम्नलिखित gitकमांड चलाएं ।

  • git pull {url} --rebase
  • git push --set-upstream {url} master

आपने पहले जीथब पर रिपॉजिटरी बनाई होगी।


0

कभी-कभी, आपके गिट से खींचने के दौरान, HEAD अलग हो जाता है। आप कमांड दर्ज करके इसे देख सकते हैं:

git branch 
  • (8790704 से अलग की गई)

    गुरुजी

    विकसित करना

अपनी शाखा में जाना बेहतर है और अपनी संबंधित शाखा से एक नया कदम उठाएं।

git checkout develop

git pull origin develop

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