आप केवल एक एकल शाखा (और कोई अन्य शाखा) को कैसे नहीं धकेलेंगे?


247

मैं एक स्थानीय गिट रिपॉजिटरी पर काम कर रहा हूं। दो शाखाएँ हैं, masterऔर feature_x

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

क्या git push origin feature_xमेरी feature_xशाखा से ( feature_xशाखा पहले से ही रिमोट पर मौजूद है) काम करेगा?

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


यहाँ एक नज़र डालें: रिमोट और यहाँ: एक शाखा को ध्‍वनि से धकेलें जैसे कि यह काम करेगा।
अल।

जवाबों:


376

हाँ, बस निम्नलिखित करें

git checkout feature_x
git push origin feature_x

54
आधुनिक git के साथ आप केवल "git पुश ओरिजिन HEAD", या यहाँ तक कि "git push HEAD" को केवल वर्तमान में चेक-आउट ब्रांच को पुश करने में सक्षम होना चाहिए।
जकुब नारबस्की

2
क्या feature_x को चेकआउट करना आवश्यक है?
एच.डी.

5
हां, क्योंकि यदि आप मास्टर हैं तो यह स्थानीय मास्टर शाखा को दूरस्थ feature_x शाखा में धकेलने का प्रयास करेगा। चेकआउट करने के लिए नहीं करने के लिए सबसे पहले आपको "git push Origin feature_x: feature_x" करना होगा
cpjolicoeur

1
@ cpjolicoeur मैंने अन्य प्रश्नों में देखा (जैसे: यहाँ ) वे कर रहे हैं git push -u origin <branch-name>। हालाँकि आपने इसका उल्लेख नहीं किया। क्या ये ज़रूरी हैं ?
रीरो

3
@miss_R कमांड -uपर विकल्प git-pushशाखा को ट्रैक करने के लिए अपस्ट्रीम संदर्भ सेट कर देगा। इससे git-pullभविष्य में उस शाखा जैसी चीजें पहले से ही पता चल जाएंगी कि कौन सी शाखा को निर्दिष्ट किए बिना से खींचना है। यह एकल शाखा को आगे बढ़ाने के विकल्प के रूप में आवश्यक नहीं है, लेकिन व्यापक रूप से इसका उपयोग किया जाता है क्योंकि बहुत से लोग स्थानीय शाखा को उस दूरस्थ शाखा को ट्रैक करना चाहते हैं जिसे वे धक्का दे रहे हैं।
cpjolicoeur

74

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

git config push.default upstream

इसका मतलब यह है कि जब आप git पुश करेंगे तो git केवल करंट (चेक आउट) शाखा को ही अपडेट करेगा।

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

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

2
धन्यवाद, currentमैं जो देख रहा था, शाखा git pushमें डिफ़ॉल्ट रूप से उसे fooशाखा में धकेल देगा origin/foo
डोरियन

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

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

1
नोट: git संस्करण 2 के बाद से डिफ़ॉल्ट मान बदल गया है simple
डेनियल

8

कार्तिक बोस के जवाब के शीर्ष पर मामूली अद्यतन - आप विश्व स्तर पर कॉन्फ़िगर कर सकते हैं, अपने सभी कार्यक्षेत्रों को प्रभावित करने के लिए उस तरह से व्यवहार कर सकते हैं:

git config --global push.default upstream

नदी के ऊपर मेरे लिए एक वैध सेटिंग के रूप में पहचाना नहीं गया था, इसके बजाय 'करंट' लगाना था
टिड्डा

-2

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

फू / की सामग्री को मूल / गुरु तक पहुंचाने के लिए, आपको सबसे पहले इसके अपस्ट्रीम को सेट करना होगा:

git checkout foo
git branch -u origin/master

तब आप इस शाखा का उपयोग करके धक्का दे सकते हैं:

git push origin HEAD:master

अंतिम आदेश में आप जोड़ सकते हैं - प्रवर्तन के मूल / मास्टर के पूरे इतिहास को बदलने के लिए फू के साथ।

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