2009-05-06 14 views
18

संभवतः दो शाखाओं को करने और प्रतिबद्ध करने के लिए 'गिट पुश' का कारण क्या होगा? मेरी अपनी शाखा है जिस पर मैं काम कर रहा हूं, जो साझा रेपो ... और एक मास्टर शाखा पर है। अभी मैं बस अपनी निजी शाखा में धक्का देना चाहता था जो ठीक से चला गया, लेकिन उसने मास्टर को धक्का देने की कोशिश की और खारिज कर दिया।इस गिट पुश में दो शाखाओं को गिट क्यों दबा रहा है?

foo$ git push 
Counting objects: 38, done. 
Delta compression using 2 threads. 
Compressing objects: 100% (19/19), done. 
Writing objects: 100% (21/21), 9.73 KiB, done. 
Total 21 (delta 14), reused 0 (delta 0) 
To ssh://example.com/project.git 
    8184634..86b621e mybranch -> mybranch 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to 'ssh://example.com/project.git' 

मेरे config इस तरह दिखता है:

remote.origin.url=ssh://example.com/project.git 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 
branch.mybranch.remote=origin 
branch.mybranch.merge=refs/heads/mybranch 

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

उत्तर

26

किसी भी तर्क के बिना git push का उपयोग करते समय, यह सभी स्थानीय शाखाओं को धक्का देगा जिनके पास एक ही नाम के साथ संबंधित रिमोट शाखा है। चूंकि आपके स्थानीय भंडार में master और mybranch शाखाएं हैं, और रिमोट रिपोजिटरी में master और mybranch शाखाएं हैं, तो गिट दोनों को धक्का देगी। git push origin mybranch

आप मास्टर पुश करने के लिए चाहते हैं, तो आपको पहले गुरु से खींच कर कि त्रुटि को ठीक कर सकते हैं:

आप केवल एक शाखा पुश करने के लिए चाहते हैं, तो आप स्पष्ट रूप से है कि जो शाखा आप पुश करने के लिए चाहते हैं Git करने के लिए कह सकते हैं। गिट विलय के बारे में शिकायत करता है कि वह तेजी से आगे बढ़ रहा है, क्योंकि किसी और ने मास्टर से खींचने के आखिरी बार मास्टर के लिए प्रतिबद्धता को धक्का दिया है।

+0

है क्या होगा यदि मैं पर उन दोनों को पुश करने के लिए, बस नहीं करना चाहते उसी समय?कई बार मैं सिर्फ अपने ब्रैंच को धक्का देना चाहता हूं, और ऐसे समय होते हैं जब मैं अपने ब्रैंच को मास्टर में विलय कर दूंगा और मास्टर को धक्का देना चाहता हूं। उस मामले में कोई क्या करता है? – Coocoo4Cocoa

+0

आप "गिट पुश " फ़ॉर्म का उपयोग करके हमेशा उस शाखा को स्पष्ट रूप से नामित कर सकते हैं जिसे आप धक्का देना चाहते हैं। देखें http://www.kernel.org/pub/software/scm/git/docs/git-push.html –

+0

गिट के नए संस्करण आपको इस व्यवहार को निर्दिष्ट करने की अनुमति देते हैं। – Dustin

3

यदि आप केवल वर्तमान शाखा को धक्का देना चाहते हैं, तो आप "गिट पुश मूल हेड" या शायद "गिट पुश हेड" (आधुनिक गिट के साथ) का उपयोग कर सकते हैं।

डिफ़ॉल्ट व्यवहार करता है, तो धक्का के लिए कोई refspec (के लिए आपके द्वारा निर्धारित refspec लाने अपने config में, लेकिन नहीं धक्का के लिए) मिलान refs पुश करने के लिए है। git-push(1) से:

Git धक्का [...] [< भंडार ><refspec> ...]

<refspec> ...

विशेष रेफस्पेक: (या +: गैर-फास्ट फॉरवर्ड अपडेट्स को अनुमति देने के लिए) "मेलिंग" शाखाओं को धक्का देने के लिए गिट को निर्देशित करता है: प्रत्येक पक्ष के लिए स्थानीय पक्ष पर मौजूद है, तो की एक शाखा दूरस्थ नाम पर पहले से मौजूद है, तो दूरस्थ पक्ष अपडेट किया गया है। यह डिफ़ॉल्ट आपरेशन मोड यदि कोई स्पष्ट refspec पाया जाता है (है कि न तो पर कमांड लाइन है और न ही ...

+0

जब मैं एक नया (एर) गिट (1.6.3.1 कहता हूं) के साथ "गिट पुश" चलाता हूं, तो मुझे एक बड़ी चेतावनी मिलती है, जिसमें कहा जाता है कि मुझे push.default सेट करना चाहिए या रिपोजिटरी को पुश रेफस्पेस को कॉन्फ़िगर करना चाहिए। मैं अपने जीवन के लिए नहीं समझ सकता कि दूसरी बात कैसे करें। Google सहायक नहीं रहा है। (मैं भंडार को कॉन्फ़िगर करना चाहता हूं, क्योंकि मेरे भंडारों के संभावित पुशर्स को बड़ी वसा चेतावनी के साथ भ्रमित/परेशान किया जाएगा, और मैं नहीं चाहता कि उन्हें "गिट क्लोन ..." के बाद कुछ भी कॉन्फ़िगर करना पड़े। – asjo

+2

आप रिमोट को कॉन्फ़िगर (सेट अप) करते हैं। .push, जहां शायद आपके मामले 'मूल' में होगा, और नंगे भंडार के लिए दर्पण सिंक पुश के लिए उपयोग करने के लिए "+ refs/head/*: refs/head/*" (और टैग के लिए समान) होगा –

संबंधित मुद्दे