2009-03-06 12 views
45

मैं हार मानता हूं! जब भी मैं पुश करने के लिए मैं एक बेवकूफ पाने की कोशिश:गिट पुश अस्वीकार

! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:companyX/projectX.git' 

हमारी टीम एक नया Git सेटअप है। निजी शाखा बनाने के बजाय अब मैंने अपनी मुख्य प्रतिलिपि बनाने के लिए हमारे मुख्य भंडार (गीथूब पर) को फोर्क किया।

कुछ बिंदु मैं क्या किया पर था:

$ git fetch upstream master:upstreammaster 

तो यहाँ मेरे वर्तमान सेटअप ::

$ git branch 
master 
* upstreammaster 

$ git remote -v 
origin [email protected]:userX/projectX.git 
upstream [email protected]:companyX/projectX.git 

जहां userx मेरी निजी भंडार है।

तो मैं जाता हूं और अपनी अपस्ट्रीममास्टर शाखा में कुछ बदलाव करता हूं, और "अपस्ट्रीम मास्टर" से पुल करता हूं। सब कुछ विलीन हो जाती है और सामान:

$ git pull upstream master 
remote: Counting objects: 95, done. 
remote: Compressing objects: 100% (60/60), done. 
remote: Total 60 (delta 54), reused 0 (delta 0) 
Unpacking objects: 100% (60/60), done. 
From [email protected]:companyX/projectX 
* branch   master  -> FETCH_HEAD 
Merge made by recursive. 
stuff      | 165 ++++++++++++-------- 
stuff      | 35 ++-- 
stuff      | 107 ++++++++++--- 
stuff      | 105 ++++++++++--- 
stuff    | 24 ++-- 
stuff    | 9 +- 
stuff     | 53 +++---- 
stuff   | 44 +++--- 
stuff    | 52 +++---- 
stuff | 32 +---- 
stuff   | 4 +- 
stuff    | 138 ++++++++--------- 
stuff  | 58 ++++---- 
stuff | 115 ++++++++------ 
stuff   | 5 +- 
stuff      | 39 ++--- 
stuff      | 28 ++-- 
17 files changed, 560 insertions(+), 453 deletions(-) 

लेकिन तब जब मैं करने की कोशिश:

$ git push upstream master 
To [email protected]:companyX/projectX.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:companyX/projectX.git' 

कोई मदद greately की सराहना की होगी! अगर आपको स्पष्टीकरण की आवश्यकता है तो कृपया पूछें, मैं जवाब दूंगा!

+0

@drozzy कोशिश: तुम जानते हो क्यों Git अपने आदेश को स्वीकार नहीं करता है? आपके आदेश ने एक बार मेरे लिए काम किया। मेरे मैक में गिट को दूसरे फ़ोल्डर में ले जाने के बाद, मुझे एक समान त्रुटि संदेश मिलता है। –

+0

कोई खेद नहीं है मुझे नहीं पता। मेरी दूसरी शाखा को अपस्ट्रीममास्टर में विलय करने के बाद, मैं ज्यादातर "गिट पुश अपस्ट्रीम मास्टर" करता हूं। – drozzy

+0

यह भी देखें [गिट पुश गैर-फास्ट-फॉरवर्ड अपडेट अस्वीकार कर दिए गए थे] (http://stackoverflow.com/questions/4684352/whats-a-fast-forward-in-git)। –

उत्तर

20

जब एक धक्का कर रही है, नदी के ऊपर गुरु के लिए refspec निर्दिष्ट करने का प्रयास:

git push upstream upstreammaster:master 
+1

यह किसी कारण से काम करता है ... – drozzy

+3

@Jarret: यह मेरे लिए काम नहीं करता है। मेरा कोड $ git push [email protected]: उपयोगकर्ता/repo.git [email protected]: उपयोगकर्ता/repo.git: मास्टर। –

+0

मासी, दूसरे पैरामीटर पर पूर्ण यूआरएल का उपयोग किए बिना प्रयास करें: git [email protected]: उपयोगकर्ता/repo.git मास्टर –

13

सबसे पहले, एक ही refspec है कि आप करने के लिए पुश करने के लिए कोशिश कर रहे हैं से खींचने के लिए प्रयास करते हैं।

यदि यह काम नहीं करता है, तो आप git push -f <repo> <refspec> का उपयोग कर git push को मजबूर कर सकते हैं, लेकिन सावधानी बरतें: यह विधि रिमोट रिपोजिटरी पर संदर्भों को हटाने का कारण बन सकती है।

16

जारेट हार्डी सही है। या, पहले अपने परिवर्तन मास्टर में वापस मर्ज करें और फिर पुश को आज़माएं। डिफ़ॉल्ट रूप से, git push उन सभी शाखाओं को धक्का देता है जिनके नाम रिमोट पर मेल खाते हैं - और कोई अन्य नहीं। तो वे आपके दो विकल्प हैं - या तो स्पष्ट रूप से निर्दिष्ट करें जैसे जारेट ने कहा या एक आम शाखा में वापस विलय करें और फिर धक्का दें।

गिट मेल सूची पर इसके बारे में बात की गई है और यह स्पष्ट है कि यह व्यवहार जल्द ही किसी भी समय बदलने वाला नहीं है - कई डेवलपर्स अपने कार्यप्रवाहों में इस व्यवहार पर भरोसा करते हैं। नदी के ऊपर से कोई भी परिवर्तन में

  1. पुल:

    संपादित करें/स्पष्टीकरण

    अपने upstreammaster शाखा मान लिया जाये कि पुश करने के लिए तो आप ऐसा कर सकता है के लिए तैयार है।

    $ Git खींच नदी के ऊपर मास्टर

  2. अपने स्थानीय गुरु शाखा में स्विच करें

    $ Git चेकआउट मास्टर

  3. में परिवर्तन मर्ज upstreammaster

    $ Git से विलय upstreammaster

  4. मेरे बदलावों को पुश करें

    $ Git धक्का नदी के ऊपर

एक और बात यह है कि आप ताकि आपके प्रतिबद्ध सब एक साथ कर रहे हैं इससे पहले कि धक्का rebase नदी के ऊपर/मास्टर के खिलाफ अपने परिवर्तन करने के लिए है क्या करना चाहते हो सकता है। आप क्या कर सकते हैं या तो है कि आपके पुल के हिस्से के रूप में # 1 और ऊपर (git rebase upstream/master) # 2 या आप यह कर सकते के बीच एक अलग कदम के रूप में (git pull --rebase upstream master)

+0

आपका मतलब क्या है "एक सामान्य शाखा में वापस विलय करें और फिर धक्का दें"? इस मामले में आम शाखा कौन सा है? – drozzy

+0

मुझे शाखा में जांच करने और काम करने के बाद एक ही समस्या थी, और उन परिवर्तनों को धक्का देना जिनमें मास्टर शाखा में हटाई गई फ़ाइल में एक अद्यतन शामिल था (जिसे मैंने बिल्कुल छुआ नहीं था)। एक अन्य डेवलपर ने कुछ गिट कमांड की कोशिश की जो मैंने नहीं पकड़ा, लेकिन समस्या बनी रही: 'गिट स्टेटस' ने दिखाया कि मेरी शाखा साफ थी, 'गिट पुल' ने कुछ भी नहीं किया, लेकिन कमांड 'गिट पुश' अभी भी आउटपुट 'त्रुटि: धक्का देने में विफल कुछ refs ... '। अंततः मुझे इस तरह की समस्या ठीक हो गई: 1. 'गिट चेकआउट मास्टर', 2. 'गिट पुल', और 3. 'गिट चेकआउट the_branch_name'। –

+0

एर ... अच्छा, और जब आप पहली कमांड करते हैं (गिट पुल अपस्ट्रीम मास्टर) और आपके पास पुल में एक संघर्ष होता है ??? आगे बढ़ने से पहले आपको संघर्ष को हल करना होगा ?? –

3

"नदी के ऊपर" एक नंगे भंडार पर अपने भंडार है? मुझे एक ही त्रुटि मिली, लेकिन जब मैं नंगे में बदल जाता हूं तो वे अब नहीं होते हैं।

+0

भयानक, यह मेरी समस्या का कारण बन रहा था, उत्तर के लिए धन्यवाद! – adamc