2009-05-04 13 views
193

मैं स्थानीय गिट भंडार पर काम कर रहा हूं। दो शाखाएं हैं, master और feature_xआप केवल एक ही गिट शाखा (और कोई अन्य शाखा) कैसे धक्का देते हैं?

मैं रिमोट रेपो में feature_x को धक्का देना चाहता हूं, लेकिन मैं master शाखा में परिवर्तनों को धक्का नहीं देना चाहता हूं।

मेरी feature_x शाखा से (feature_x शाखा पहले से ही दूरस्थ पर मौजूद है) काम?

मैं इसे अपने बॉक्स पर परीक्षण नहीं करना चाहता, क्योंकि मैं अभी मास्टर को धक्का नहीं दे सकता।

+0

यहां एक नज़र डालें: [रिमोट] (http://git.or.cz/course/svn.html#remote) और यहां: [एक शाखा को जिथब पर धक्का दें] (http://github.com/guides/पुश-ए-शाखा-टू-गीथब) लगता है जैसे यह काम करेगा। –

उत्तर

307

हाँ, बस नीचे दिए

git checkout feature_x 
git push origin feature_x 
+48

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

+2

क्या फीचर_एक्स में चेकआउट करना आवश्यक है? –

+5

हां, क्योंकि यदि आप मास्टर पर हैं तो यह स्थानीय मास्टर शाखा को दूरस्थ सुविधा_एक्स शाखा में धक्का देने का प्रयास करेगा। पहले चेकआउट करने की आवश्यकता नहीं है आपको "गिट पुश मूल सुविधा_एक्स: फीचर_एक्स" – cpjolicoeur

60

डिफ़ॉल्ट रूप से git push अद्यतन सभी दूरस्थ शाखाओं से करते हैं। लेकिन आप केवल वर्तमान शाखा को अपस्ट्रीम में अपडेट करने के लिए गिट को कॉन्फ़िगर कर सकते हैं।

git config push.default upstream 

इसका मतलब है कि गिट आपके द्वारा गिट पुश करते समय केवल वर्तमान (चेक आउट) शाखा अपडेट करेगा।

अन्य वैध विकल्प हैं:

  • nothing: कुछ भी (त्रुटि बाहर) जब तक एक refspec स्पष्ट दिया जाता है धक्का मत करो। यह मुख्य रूप से उन लोगों के लिए है जो हमेशा स्पष्ट होने से गलतियों से बचना चाहते हैं।
  • matching: वाले सभी शाखाओं को पुश करें, दोनों सिरों पर समान नाम। (Ver 1.7.11 से पहले डिफ़ॉल्ट विकल्प)
  • upstream: वर्तमान शाखा को अपने अपस्ट्रीम शाखा में पुश करें। यह मोड केवल तभी समझ में आता है जब आप उसी भंडार को दबा रहे हों जिसे आप आम तौर पर खींचते हैं (यानी केंद्रीय वर्कफ़्लो)। स्थानीय और दूरस्थ शाखा के लिए एक ही नाम रखने की आवश्यकता नहीं है।
  • tracking: बहिष्कृत, इसके बजाय upstream का उपयोग करें।
  • current: वर्तमान शाखा को की रिमोट शाखा में प्राप्त करने के लिए प्राप्त नाम पर पर पुश करें। केंद्रीय और गैर-केंद्रीय वर्कफ़्लो दोनों में काम करता है।
  • simple: [वर्चुअल वर्कफ़्लो में वेर 1.7.11] के बाद उपलब्ध है, upstream जैसे काम को जोड़ने के लिए इनकार करने के लिए एक अतिरिक्त सुरक्षा के साथ, अपस्ट्रीम शाखा का नाम स्थानीय से अलग है। रिमोट से अलग होने पर रिमोट से अलग होने पर आप सामान्य रूप से खींचते हैं, current के रूप में काम करते हैं। यह सबसे सुरक्षित विकल्प है और शुरुआती लोगों के लिए उपयुक्त है। यह मोड गिट 2.0 में डिफ़ॉल्ट हो गया है।
+2

नामक भंडार में धक्का देगा धन्यवाद,' वर्तमान 'जो मैं खोज रहा था,' foo' शाखा में डिफ़ॉल्ट रूप से 'गिट पुश' द्वारा इसे धक्का देगी 'मूल/foo' शाखा। – Dorian

+0

@ डोरियन धन्यवाद, मैं मानता हूं कि 'वर्तमान' डिफ़ॉल्ट के रूप में अधिक समझ में आता है। –

+0

@ डोरियन, @ ज़ोलटन - मुझे लगता है कि 'सरल' एक डिफ़ॉल्ट के रूप में अधिक समझ में आता है। मैंने 'कब उपयोग करें' के साथ जवाब अपडेट किया है। Pls एक नज़र है। –

4

Karthik Bose's answer के शीर्ष पर माइनर अद्यतन - आप Git विश्व स्तर पर कॉन्फ़िगर कर सकते हैं, कि जिस तरह से व्यवहार करने के लिए अपने कार्यस्थान सभी को प्रभावित करने के लिए:

git config --global push.default upstream 
+0

अपस्ट्रीम को मेरे लिए एक वैध सेटिंग के रूप में पहचाना नहीं गया था, इसके बजाय 'वर्तमान' रखना था – grasshopper

-2

तो मान लीजिए कि आप एक स्थानीय शाखा foo डालते हैं, एक दूरस्थ बुलाया मूल और एक दूरस्थ शाखा मूल/मास्टर।

मूल/स्वामी के पास foo की सामग्री को पुश करने के लिए, आप पहली बार निर्धारित करने की आवश्यकता है अपने अपस्ट्रीम:

git push origin HEAD:master 

पिछले आदेश में:

git checkout foo 
git branch -u origin/master 

तो फिर तुम का उपयोग कर इस शाखा के लिए धक्का कर सकते हैं आप foo के साथ मूल/मास्टर के पूरे इतिहास को प्रतिस्थापित करने के लिए --force जोड़ सकते हैं।

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