2009-05-11 16 views
21

से आगे नहीं कर रहा हूं, मैं एक शाखा के साथ 100% काम करता हूं जिसे मैंने मास्टर शाखा से हटा दिया है। अब जब एक सहयोगी ने मूल/मास्टर को वापस धकेल दिया है, तो मैंने उन परिवर्तनों को अपनी व्यक्तिगत शाखा में धक्का देने की कोशिश की। जब मैं एक 'Git चेकआउट मास्टर' के बाद एक 'Git स्थिति' मैं के बाद कार्य करें:गिट: एक शाखा जो मैं मूल/मास्टर

# Your branch is ahead of 'origin/master' by 2 commits. 

कैसे एक शाखा मैं करने के लिए आगे 2 प्रतिबद्ध द्वारा प्रतिबद्ध कभी नहीं रहा है? यह पता लगाने का सबसे अच्छा तरीका क्या है कि वे क्या करते हैं और अनिवार्य रूप से उन्हें पूर्ववत करते हैं? मैं मूल/मास्टर को कुछ भी वापस धक्का नहीं देना चाहता क्योंकि इससे अज्ञात संघर्ष हो सकते हैं।

+0

गिट के लिए यह एक साधारण उपकरण है, यह इसके बारे में सबसे भ्रमित हिस्सा है। मेरे पास आपके जैसा ही समस्या है।मैंने कभी भी अपनी मास्टर शाखा में प्रतिबद्ध नहीं किया। मैं हमेशा बंद करता हूं और अपने परिवर्तन करता हूं। जब मैं 'गिट पुल मूल मास्टर' करता हूं तो मुझे लगता है कि यह 200 पीछे है। क्यूं कर? मैंने इसे कभी छुआ नहीं। काश वे इसे साफ़ करेंगे। – Jeff

उत्तर

35

करता HEAD में आप हैं, वे मूल/मास्टर में नहीं हैं देखने के लिए:

git log origin/master.. 

उन्हें दूर उड़ा और मूल/मास्टर के रूप में ही अपने सिर करने के लिए:

git reset --hard origin/master 

कैसे क्या आपने अपने स्वयं के भंडार में बदलावों को धक्का दिया? मैंने देखा है कि आपने "पुश" का उल्लेख किया है ... क्या मूल एक केंद्रीय रेपो है? आपके सहयोगी का रेपो? मुझे संदेह है कि आप वास्तव में क्या करना चाहते थे, अपने सहयोगी के परिवर्तनों को या तो सीधे या केंद्रीय स्टेजिंग पॉइंट से, धक्का देने के बजाय खींचें। यह हो सकता है कि आपके पास मूल/मास्टर से पहले 2 परिवर्तन वास्तव में आपके सहयोगी के परिवर्तन हैं, लेकिन मूल/मास्टर ट्रैकिंग शाखा पुरानी है।

+0

धन्यवाद araqnid। बस उत्सुक, गिट लॉग मूल/मास्टर क्या करता है .. इस मामले में करते हैं? –

+3

गिट कमांड के साथ जो संशोधन की * सीमा * लेते हैं, ए..बी "बी^ए" या "बी - एट ए" के लिए शॉर्टेंड है। "ए .." खुद ही "हेड - एट ए" के लिए शॉर्टेंड है। गिट लोड संशोधन बी, फिर संशोधन ग्राफ के माध्यम से वापस चला जाता है, जब यह मुठभेड़ करता है तो रोकता है जो ए (अक्सर एक स्वयं) से पहुंच योग्य होता है। एक साधारण संशोधन इतिहास के मामले में जहां ग्राफ केवल एक रेखा है, यह बी – araqnid

+0

+1 सहित ए के बाद काम करने के लिए सरल बनाता है। <3 –

0

क्या आपनेशाखा पर पर काम किया है पर काम कर रहे हैं?

यदि आप अपनी शाखा (git checkout -b testrebase) की प्रतिलिपि बनाने की कोशिश नहीं कर सकते हैं और यह देखने के लिए git rebase master जारी कर रहे हैं या नहीं। इससे मास्टर के सापेक्ष आपके द्वारा किए गए सभी कामों को उजागर किया जाएगा और फिर उन्हें वापस लागू करने का प्रयास किया जाएगा (मूल रूप से इतिहास को समझ में आता है)। अगर यह काम नहीं करता है तो बस testrebase हटा दें।

4

आप मास्टर की एक शाखा पर काम कर रहे हैं, और आपने दो काम किए हैं जो origin/master में नहीं हैं।

संदेश # Your branch is ahead of 'origin/master' by 2 commits. कह रहा है:

# Your branch 'mybranch' has two commits not in 'origin/master' 

कल्पना Git उपयोगकर्ताओं SVN की तरह संशोधन संख्या, आप शाखा करता है कर रहे हैं 1, 2, 3, 4, 5 - लेकिन origin/master केवल 1, 2 है, 3. तो संशोधन इतिहास निम्नलिखित भद्दा ASCII आरेख तरह दिखता है ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

लॉग में पिछले दो प्रतिबद्ध प्रदर्शित करने के लिए आप कर सकते हैं ..

git log HEAD..HEAD~2 
0

आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि आपका मूल/मास्टर मास्टर के आपके रेपो संस्करण के साथ अद्यतित है। चलने का प्रयास करें:

git fetch origin master 

इसलिए आपका स्थानीय मूल/मास्टर रेपो के मास्टर जैसा ही है। फिर जब आप

git pull origin master 

आपको सटीक प्रदर्शन प्राप्त करना चाहिए कि आपके स्थानीय मास्टर कितने आगे हैं। इसके बाद आप यह देखने के लिए araqnid's command चला सकते हैं कि वास्तव में कौन सा काम करता है।

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