2012-11-28 12 views
9

मैं Git के साथ शुरू कर रहा हूँ, इसलिए मुझे लगता है कि इस सवाल का दिन की newbiest प्रश्न हो सकता है कि क्योंकि इस कार्य इतना आसान है, लेकिन यह एक भयानक सिरदर्द पैदा ..Git विलय और धक्का

2 स्थानीय शाखाएं हैं :

  • मास्टर
  • स्थानीय/उत्पादन

और 2 रिमोट:

  • मास्टर
  • उत्पादन

मैं उत्पादन करने के लिए स्थानीय परिवर्तन पारित करने के लिए की जरूरत है। तो, मेरे कार्यप्रवाह था:

git checkout local/production 
git merge master 
git commit 
git push 

Git मर्ज: लगता है काम ठीक, यह सब मतभेदों का पता चला।

Git प्रतिबद्ध:

शाखा स्थानीय/उत्पादन पर

आपका शाखा 'मूल/उत्पादन' से आगे 2 करता रहा है।

कुछ भी नहीं (कार्य स्वच्छ निर्देशिका)

और Git धक्का प्रतिबद्ध करने के लिए:

सब कुछ अप-टू-डेट

तो बस इतना ही है, मैं नहीं कर सका रिमोट रिपोजिटरी में मेरे परिवर्तन धक्का दें।

उत्तर

12

मूल कारण: स्पष्टीकरण कटौती करने के लिए, कि आपके local/production ट्रैक न करने origin/production पर मुझे ऐसा लगता। आप इसे git branch -avv से देख सकते हैं।

बारे git push: ध्यान दें कि बहस के बिना git pushसभी दूरस्थ शाखाओं कि (git-push(1) मैनुअल पृष्ठ से) अपने स्थानीय ट्रैकिंग शाखाओं में अद्यतन किया है अद्यतन करेगा:

git push ... [<repository> [<refspec>...]] 

The special refspec : (or +: to allow non-fast-forward updates) directs git to 
push "matching" branches: for every branch that exists on the local side, the 
remote side is updated if a branch of the same name already exists on the remote 
side. This is the default operation mode if no explicit refspec is found (that is 
neither on the command line nor in any Push line of the corresponding remotes 
file---see below). 

सरल का परिणाम क्योंकि git push कभी-कभी थोड़ा अप्रत्याशित होता है अगर स्थानीय शाखाओं में किए गए परिवर्तनों को भूल जाते हैं, तो मैं व्यक्तिगत रूप से स्पष्ट रूप से निर्दिष्ट करना चाहता हूं कि कौन सी शाखाएं मैं धक्का देना चाहता हूं।आपके मामले में ऐसा लगता है यह आप क्या करना चाहते हैं:

git push origin local/production:production 

आप local/productionorigin/production ट्रैक करना चाहते हैं, तो आप local/production ट्रैकिंग शाखा origin/production के लिए विकल्प -u का उपयोग कर सकते हैं:

git push -u origin local/production:production 

(केवल एक बार आवश्यक)। फिर आप मूल से local/production पर खींच सकते हैं।

कार्यकारी सारांश: आपको ट्रैकिंग शाखा और git push के अनोखे अर्थशास्त्र की अवधारणा को समझने की आवश्यकता है।

पीएस मैं आपकी शाखा नाम local/production की अपनी पसंद के बारे में सोच रहा हूं। क्यों न केवल production? मुझे संदेह है कि आपके पास production ट्रैकिंग origin/production है और शायद आप स्थानीय विकास के लिए local/production का उपयोग कर सकते हैं। इस मामले में एक उचित कार्य प्रवाह इस तरह है:

  1. git pull origin production:production वहाँ production में नए प्रतिबद्ध हैं, तो आपके production
  2. में परिवर्तन को खींचने के लिए, कि local/production तो पीछे है या तो rebase है अपने local/productionproduction पर (या local/production पर production)
  3. पल आप production पर अपने परिवर्तन, merge या cherry-pick अपने प्रतिबद्ध धक्का और git push origin production:production के साथ परिवर्तन पुश करने के लिए चाहते हैं मर्ज करें।
+0

आप सही @FooF हैं। मेरी समस्या यह थी कि मैंने शाखा स्थानीय/उत्पादन को लिंक नहीं किया था (या ट्रैक किया?)। तो, 'गिट पुश' (तर्क के बिना) इस शाखा का पता नहीं लगा। एक और समाधान यह गिट कॉन्फ़िगरेशन में जोड़ रहा था: 'git config remote.origin.push स्थानीय/प्रोडक्शन: रेफरी/हेड/प्रोडक्शन'। वैसे भी मैं स्पष्ट रूप से निर्दिष्ट करता हूं कि आप किन शाखाओं को धक्का देना चाहते हैं। –

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