2011-12-31 19 views
36

प्रलेखन के अनुसार, Git खींच प्रदर्शन करती एक Git लाने तो एक Git मर्ज, हालांकि उस मामले Git पुल मूल मास्टर प्रदर्शन में एक Git लाने मूल मास्टर सही प्रदर्शन करना चाहिए? हालांकि, ऐसा नहीं लगता है। यहाँ एक उदाहरण है।गिट पुल मूल मास्टर मूल/मास्टर अद्यतन नहीं करता है?

(मेरे मामले में GitHub पर) मेरी दूरस्थ मूल गुरु माना निम्नलिखित इतिहास रहा है:

commit 1111111 : my first commit 
commit 2222222 : a commit from someone else 

और मैं सिर्फ अपने पहले यहाँ से कर निम्नलिखित शो के रूप में स्थानीय रूप से प्रतिबद्ध

git checkout master 
git log --pretty=format:'%h' -n 1 
1111111 

git checkout origin/master 
git log --pretty=format:'%h' -n 1 
1111111 

है मैं मेरी खींचें और परिणामों को निम्नानुसार देखें:

git checkout master 
git pull origin master 

git log --pretty=format:'%h' -n 1 
2222222 

git checkout origin/master 
git log --pretty=format:'%h' -n 1 
1111111 

जैसा देखा जा सकता है, पु वास्तव में रिमोट उत्पत्ति से नई प्रतिबद्धताओं के साथ मेरी मास्टर शाखा को अपडेट किया जाएगा, लेकिन मेरा स्थानीय मूल/मास्टर अभी भी वहां था। मुझे निम्नलिखित

git fetch origin master 

git checkout origin/master 
git log --pretty=format:'%h' -n 1 
2222222 

क्या गिट खींचने के लिए यह सही व्यवहार है या क्या मुझे कुछ याद आ रही है? मैंने गिट पुल मैन पेज को देखा और कुछ भी नहीं देखा जो इसने सुझाव दिया लेकिन मैं इसे याद कर सकता था।

+0

देखना है कि अगर यह मदद करता है तुम क्यों समझा: दूरस्थ ट्रैकिंग शाखाओं का उपयोग करना, एक ही लाए जाने और विलय लागू करके किया जा सकता। http://stackoverflow.com/questions/2452226/master-branch-and-origin-master-have-diverged-how-to-undiverge-branches या यह एक http://stackoverflow.com/questions/2883840/differences -बेटवीन-गिट-पुल-उत्पत्ति-मास्टर-गिट-पुल-उत्पत्ति-मास्टर – carbonbasednerd

+1

['गिट पुल मूल माइब्रैंच' के संभावित डुप्लिकेट स्थानीय माइब्रैंच एन मूल से आगे निकलता है। क्यों] (http: // stackoverflow।कॉम/प्रश्न/1741143/गिट-पुल-उत्पत्ति-माइब्रैंच-पत्तियां-स्थानीय-माइब्रैंच-एन-कॉमिट्स-अग्रिम-ऑफ-मूल-क्यों) –

+0

आप 'गिट fetch' करने के बाद' गिट मर्ज 'करने पर विचार करना चाहेंगे। आप आम तौर पर कम आश्चर्य के साथ समाप्त हो जाते हैं और विलय करने के तरीके पर अधिक नियंत्रण रखते हैं। –

उत्तर

28

यह थोड़ा अजीब है, लेकिन यदि आप git pull [remote] <refspec> का उपयोग करते हैं तो यह वास्तव में रिमोट रेफरी अपडेट नहीं करता है। अगर आप इसे एक निश्चित तरीके से सोचते हैं तो यह समझ में आता है: चूंकि आप एक विशिष्ट रेफरी लाने के लिए निर्दिष्ट कर रहे हैं, इसलिए इसे आपकी दूरस्थ शाखाओं के बारे में कुछ भी देखना नहीं है, इसलिए यह मूल रूप से यह नहीं जानता कि यह दूरस्थ शाखा है अद्यतन करना चाहिए यह निश्चित रूप से इसे समझ सकता है, और अगर यह अंततः तय हो जाता है तो मुझे आश्चर्य नहीं होगा, लेकिन यह मौजूदा व्यवहार है। (इसके बारे में मेलिंग सूची पर संदेश हो सकते हैं - मुझे नहीं पता।)

हालांकि आप आसानी से इसके आसपास काम कर सकते हैं। यदि आप git pull origin/master का उपयोग करते हैं, क्योंकि आप निर्दिष्ट कर रहे हैं कि रिमोट शाखा के माध्यम से क्या प्राप्त करना है, तो उसे उस दूरस्थ शाखा को अपडेट करना चाहिए। और यदि आप अपनी मास्टर शाखा पर हैं (या किसी भी अन्य शाखा ट्रैकिंग मूल/मास्टर), तो आप केवल git pull कर सकते हैं और इसे डिफ़ॉल्ट में भरने दें, और यह दूरस्थ शाखाओं को अपडेट करेगा।

यह git-pull मैन पेज में दस्तावेज है, सबसे संक्षेप में उदाहरण के तहत लेकिन अन्यत्र भी। प्रासंगिक हिस्सा:

वर्तमान शाखा में अगले दूरस्थ शाखा मर्ज:

$ git pull origin next 

यह FETCH_HEAD में अस्थायी रूप से अगले की एक प्रति को छोड़ देता है, लेकिन किसी भी रिमोट ट्रैकिंग शाखाओं अपडेट नहीं होता।

$ git fetch origin 
$ git merge origin/next 
+0

क्या यह गिट मैन पेजों में कहीं भी दस्तावेज है? –

+0

मुझे लगता है कि यह 'गिट-पुल' मैनपेज में कहीं कहीं दफनाया गया है। अगर मुझे याद है तो मैं कुछ देर बाद कोशिश करूँगा और शिकार करूँगा। – Cascabel

+0

@ केनेथबाल्ट्रीनिक: यह उदाहरण अनुभाग में है, और बाकी दस्तावेज से भी लिया जा सकता है। – Cascabel

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