GitHub में दूरस्थ परिवर्तनों को कैसे मर्ज किया जाए?


137

मैं निम्नलिखित त्रुटि प्राप्त कर रहा हूं, पहले जीथब पुश की कोशिश कर रहा हूं:

[rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:me/me.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

मैं इसे कैसे ठीक कर सकता हूं और दूरस्थ परिवर्तनों को मर्ज कर सकता हूं?

जवाबों:


106

विवरणों के लिए ' git push --help ' का 'नॉन-फास्ट फॉरवर्ड' अनुभाग देखें।

आप "गिट पुल" का प्रदर्शन कर सकते हैं, संभावित संघर्षों को हल कर सकते हैं और परिणाम को "गिट पुश" कर सकते हैं। एक "गिट पुल" कमिट A और B के बीच एक मर्ज कमिट C बनाएगा।

वैकल्पिक रूप से, आप X और B के बीच अपने परिवर्तन को "git pull --rebase" के साथ, और परिणाम को पीछे धकेल सकते हैं। रिबेस एक नया कमिट डी बनाएगा जो ए के ऊपर एक्स और बी के बीच बदलाव का निर्माण करता है।


16
मैं इस बात को छोड़कर भागता रहता हूं कि अगर मैं "गिट पुल" करता हूं, तो मुझे बताया गया है "पहले से ही अद्यतित।" और अगर मैं "git pull --rebase" करता हूं तो मुझे बताया गया है कि "वर्तमान शाखा मास्टर अप टू डेट है।" कोई विचार? धन्यवाद!
jwl

3
@ larson4 मुझे एक ही मुद्दा मिला है, लेकिन आप करने के बाद git pullएक और कमिट करें और फिर यह अच्छा होना चाहिए
पैट्रिक

20
@Patrick @larson मुझे इस तथ्य के कारण समस्या थी कि मैंने त्रुटि संदेश को ध्यान से नहीं पढ़ा। अस्वीकार एक शाखा पर था जिसे मैंने चेक आउट नहीं किया था। मैं वास्तव में जिस शाखा पर था, वह सफल हो रही थी। का समाधान था git checkout other-branch; git pull; git push; git checkout branch-i-was-working-on
नूह स्परियर

86

आप अपनी शाखा के नाम से पहले + प्रतीक जोड़कर एक धक्का भी लगा सकते हैं।

git push origin +some_branch

1
धन्यवाद, यह मेरे लिए काम करता है। अन्य समाधान मेरेgit reset --hard
ओली

1
धन्यवाद! मैंने उत्पादन वातावरण में कुछ कार्यक्षमता का परीक्षण करने के लिए अपने हरोकू स्टेजिंग ऐप तक "ए" शाखा को धक्का दिया था। तब (स्थानीय रूप से) मैंने "ए" और "बी" को "मास्टर" में विलय कर दिया और "मास्टर" को मेरे स्टेजिंग ऐप में धकेलना चाहता था। समस्याओं के सभी प्रकार था। इसने "मास्टर" को बहुत सरल बना दिया। धन्यवाद!
डॉन लैथम

मेरे लिए भी काम किया। मुझे इस मुद्दे को खोजने के लिए 4 घंटे लगे। बहुत बहुत धन्यवाद। मैं स्थानीय मशीन (विंडोज़ 7) पर नेटबीन्स चलाता हूं और स्थानीय पर प्रत्येक धक्का चाहता था, रिमोट मशीन (लिनक्स) पर जांच करता हूं।
मैक्सिम शाओतिन

ध्यान दें कि यह विधि सुरक्षित नहीं हो सकती है, और यह कुछ विचलन के कारण पहुंच से बाहर हो सकती है।
samuil

यह स्वीकृत समाधान होना चाहिए। अन्य समाधान मेरे लिए काम नहीं कर रहे थे
केले

20

आपके पास शायद गितुब पर परिवर्तन हैं जिन्हें आपने कभी विलय नहीं किया। git pullपरिवर्तनों को लाने और मर्ज करने का प्रयास करें , फिर आपको धक्का देने में सक्षम होना चाहिए। क्षमा करें यदि मैंने आपके प्रश्न को गलत समझा।


18
यदि आपको दूरस्थ मास्टर में परिवर्तनों को अस्वीकार करने और अपने स्वयं के परिवर्तनों को धकेलने की आवश्यकता है, तो -f कुंजी के साथ पुश करने का प्रयास करें
Hotsyk

13

यदि आप "गिट पुल" और यह कहते हैं "पहले से ही अद्यतित है।", और अभी भी यह त्रुटि मिलती है, तो यह हो सकता है क्योंकि आपकी अन्य शाखाओं में से एक आज तक नहीं है। किसी अन्य शाखा में जाने का प्रयास करें और सुनिश्चित करें कि एक बार फिर से "पुश पुश" करने की कोशिश करने से पहले अप-टू-डेट है:

शाखा "फू" पर जाएं और इसे अपडेट करें:

$ git checkout foo
$ git pull

आप कमांड जारी करके प्राप्त की गई शाखाओं को देख सकते हैं:

$ git branch

क्या आप बता सकते हैं कि यह क्यों काम करता है और आवश्यक है? (इसने मेरी समस्या को हल कर दिया।) यह सिर्फ मुझे प्रति-सहज लगता है। मुझे समझ में नहीं आ रहा है कि git को दूसरी शाखा की आवश्यकता क्यों होगी और साथ ही साथ मुझे मास्टर शाखा पर धकेलने की भी आवश्यकता होगी।
क्विनसी वॉन बेसिएक्स

@QuinxyvonBesiex मुझे यकीन नहीं है कि मैं खुद समझ रहा हूँ। यह स्वयं Git की अंतर्निहित संरचना के साथ कुछ करने के लिए हो सकता है, और यह कैसे शाखाओं को व्यवस्थित करता है (जो मूल रूप से टैग के रूप में जहाँ तक मैं इसे समझता हूं)।
डेविड कैलहॉन

7

आप इसे धक्का देने के लिए मजबूर कर सकते हैं, लेकिन कृपया यह तभी करें जब आप यह सुनिश्चित कर लें कि आप क्या कर रहे हैं।

आदेश है:

git push -f 

3

यह समस्या तब भी हो सकती है जब आपके पास परस्पर विरोधी टैग हों। यदि आपका स्थानीय संस्करण और दूरस्थ संस्करण अलग-अलग आवागमन के लिए एक ही टैग नाम का उपयोग करते हैं, तो आप यहां समाप्त कर सकते हैं।

आप इसे स्थानीय टैग हटाने के द्वारा हल कर सकते हैं:

$ git tag --delete foo_tag

2

जब मुझे यह त्रुटि मिली, तो मैंने अपना संपूर्ण प्रोजेक्ट फ़ोल्डर वापस कर दिया। फिर मैंने कुछ ऐसा किया

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

... आपके शाखा के नाम पर निर्भर करता है (यदि यह मास्टर नहीं है)।

फिर मैंने किया git pull --rebase। उसके बाद, मैंने अपने समर्थित प्रोजेक्ट की फ़ाइलों के साथ खींची गई फ़ाइलों को बदल दिया। अब मैं फिर से अपने बदलाव करने और धक्का देने के लिए तैयार हूं।


0

1) स्थानीय परिवर्तनों को अधिलेखित करने के लिए एक पुल मजबूर करना

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

अपने IDE में निम्न आदेश निष्पादित करें:

git रीसेट - हार्ड

पकड़ खींचो

यह आपके सभी स्थानीय परिवर्तनों को तुरंत नष्ट कर देगा इसलिए सुनिश्चित करें कि आप जानते हैं कि आप क्या कर रहे हैं और आपको अपने स्थानीय परिवर्तनों की आवश्यकता नहीं है।

2) दोनों परिवर्तन रखना (स्थानीय और रेपो से)

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

git $ the_file_under_error जोड़ें

कमिट

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