2012-01-29 22 views
25

मैं git करने के लिए नया हूँ पर 'आपका शाखा से आगे है', और मैं निम्नलिखित व्यवहार का मतलब नहीं कर सकते हैं:मूल/मास्टर '1 से प्रतिबद्ध' स्पष्ट धक्का

मैं एक bitbucket रेपो है मैं स्थानीय रूप से क्लोन करता हूं, फिर मैं स्थानीय रूप से संशोधित करता हूं और प्रतिबद्ध करता हूं, फिर मैं रिमोट रेपो को दबाता हूं। अगर मैं एक अंतर्निहित पुश करता हूं, या 'पुश मूल' करता हूं, तो कोई समस्या नहीं है। अगर मैं स्पष्ट रिमोट यूआरएल का उपयोग करके धक्का देता हूं, तो मुझे स्टेटस संदेश मिलता है 'आपकी शाखा' मूल/मास्टर 'से पहले 1 प्रतिबद्ध है।

ऐसा लगता है कि Git मूल रूप में एक ही होने के रूप में स्पष्ट पता नहीं पहचानता है, तो वास्तव में क्या चल रहा है। अगर मैं एक और निहित धक्का करता हूं, तो यह कुछ भी नहीं करता है, लेकिन यह कहा गया संदेश साफ़ करता है।

[email protected]:/more/coding/git-tests/ask1$ git --version 
git version 1.7.2.5 

[email protected]:/more/coding/git-tests$ git clone https://[email protected]/shishani/dirasi.git ask1 
Cloning into ask1... 
Password: 
remote: Counting objects: 24054, done. 
remote: Compressing objects: 100% (6300/6300), done. 
remote: Total 24054 (delta 17124), reused 24024 (delta 17106) 
Receiving objects: 100% (24054/24054), 11.83 MiB | 251 KiB/s, done. 
Resolving deltas: 100% (17124/17124), done. 

[email protected]:/more/coding/git-tests$ cd ask1 

[email protected]:/more/coding/git-tests/ask1$ jed setup.py 

[email protected]:/more/coding/git-tests/ask1$ git commit -a 
[master a053f28] modified: setup.py 
1 files changed, 1 insertions(+), 0 deletions(-) 

[email protected]:/more/coding/git-tests/ask1$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

[email protected]:/more/coding/git-tests/ask1$ git remote show origin 
Password: 
* remote origin 
    Fetch URL: https://[email protected]/shishani/dirasi.git 
    Push URL: https://[email protected]/shishani/dirasi.git 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local branch configured for 'git pull': 
    master merges with remote master 
    Local ref configured for 'git push': 
    master pushes to master (fast-forwardable) 

[email protected]:/more/coding/git-tests/ask1$ git push 
Password: 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 314 bytes, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: bb/acl: shishani is allowed. accepted payload. 
To https://[email protected]/shishani/dirasi.git 
    5e9ffd1..a053f28 master -> master 

[email protected]:/more/coding/git-tests/ask1$ git status 
# On branch master 
nothing to commit (working directory clean) 

[email protected]:/more/coding/git-tests/ask1$ jed setup.py 

[email protected]:/more/coding/git-tests/ask1$ git commit -a 
[master 6d0e236] modified: setup.py 
1 files changed, 1 insertions(+), 0 deletions(-) 

[email protected]:/more/coding/git-tests/ask1$ git push https://[email protected]/shishani/dirasi.git master 
Password: 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 298 bytes, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: bb/acl: shishani is allowed. accepted payload. 
To https://[email protected]/shishani/dirasi.git 
    a053f28..6d0e236 master -> master 

[email protected]:/more/coding/git-tests/ask1$ git status 
# On branch master 
**# Your branch is ahead of 'origin/master' by 1 commit.** <-- this does not reflect current state 
# 
nothing to commit (working directory clean) 

[email protected]:/more/coding/git-tests/ask1$ git push 
Password: 
Everything up-to-date 

[email protected]:/more/coding/git-tests/ask1$ git status 
# On branch master 
nothing to commit (working directory clean) 
+0

यह प्रश्न गलत प्रश्न के डुप्लिकेट के रूप में गलत तरीके से बंद कर दिया गया था। जैसे ही मैं गिट के लिए डुप्ली हथौड़ा प्राप्त कर रहा हूं, मैं इसे फिर से खोलना शुरू कर दूंगा और इस तरह के प्रश्नों को सही तरीके से बंद कर दूंगा [अन्य आपकी शाखा 'मूल/मास्टर' प्रश्नों से आगे है] (https://www.google .com/खोज? q = आपका + शाखा + + आगे +% 27origin% 2Fmaster% 27 की + है)। –

उत्तर

18

मेरा मानना ​​है कि आप परिवर्तन में पहले git एहसास होगा कि दूरदराज के अंत अद्यतन किया गया है वापस खींचने की जरूरत है:

यहां एक नमूना सत्र है। आप एक त्वरित git pull के माध्यम से यह कर सकते हैं (या, के रूप में आप अपने उदाहरण में ट्रैक उत्पत्ति का एक git push दिखाने के लिए,)।

आप मैन्युअल रूप से जो refs/remotes/origin अंक के लिए प्रतिबद्ध बदल सकता है।

यह खजाने के लिए मनमाने ढंग से दूरदराज के समानार्थी शब्द पहचान करने के लिए सामग्री पर नजर उम्मीद करना सही नहीं है; कल्पना करें कि क्या आपके पास पांच अलग-अलग यूआरएल थे जो सभी एक ही सर्वर-साइड रिपोजिटरी थे। जब आप रेपो ए को दबाते हैं, तो क्या इसका मतलब यह है कि आपके परिवर्तन बी (रेपो की आपकी शाखा) के लिए प्रतिबद्ध हैं? गिट को जानने का कोई तरीका नहीं है। इसके बजाए, यह केवल दो मामलों में रिमोट-हेड संदर्भ अपडेट करता है: एक पुल, और डिफ़ॉल्ट गंतव्य पर धक्का।

+0

मैं अलग-अलग समानार्थी होने वाले रेपो के बारे में आप जो कह रहा हूं उससे सहमत हूं, लेकिन यदि हम सटीक उसी यूआरएल का उपयोग कर रहे हैं जो गिट पहले से ही जागरूक है (और 'रिमोट शो मूल' द्वारा रिपोर्ट किया गया है), तो यह क्यों पहचानना नहीं चाहिए तथ्य। आखिरकार, एक यूआरएल एक अद्वितीय संसाधन को इंगित करता है। दूसरी ओर यदि उपयोगकर्ता एक अलग समानार्थी का उपयोग कर रहा है तो वे इसके बारे में अवगत होंगे और गिट को उसी संसाधन को इंगित करने की अपेक्षा नहीं करेंगे। –

+0

@ बेसेलशिशानी यह एक फिसलन ढलान है। यदि आपने जो भी सुझाव दिया है, और यूआरएल की सटीक स्ट्रिंग की तुलना की है (तो आसान!), फिर 'https: // shishani @ bitbucket.org/shishani/dirasi.git' को दबाकर सिर और' http: // शिशानी @ bitbucket.org/शिशानी/dirasi.git' नहीं होगा। डिट्टो क्वेरी स्ट्रिंग्स, विभिन्न प्रोटोकॉल, अतिरिक्त स्लेश, कैपिटलाइजेशन ... गिट लोगों को फीचर अनुरोध सबमिट करने के लिए आपका स्वागत है, वे अच्छे हैं! – Borealid

8

हाँ, आप एक git fetch या git fetch origin कि मामले में क्या करना होगा। गिट पर ध्यान नहीं दिया जाता है कि आप कहां धक्का देते हैं, केवल रिमोट (और रिमोट ट्रैकिंग शाखाएं) यह महत्वपूर्ण है कि आप कितने काम करते हैं, इसकी स्थिति की रिपोर्ट करते समय

19

जब स्थिति Your branch is ahead of 'origin/master' by 1 commit कहती है, तो इसका वास्तव में मतलब है origin/master। यही कारण है, वहाँ के लिए अपने रेपो इशारा में origin/master नामित सूचक है प्रतिबद्ध है कि remote branch की HEAD है, और अपने master इस प्रतिबद्ध से आगे है।

आपके रेपो पहचानने वाले सभी रिमोट्स के लिए, यदि आप पुल/पुश/फ़ेच करते हैं तो यह रेपो में <remote>/<branchname> पॉइंटर बनाता है। यह केवल प्रतिबद्धता के लिए एक सूचक है, और यदि आप उस शाखा को checkout करने का प्रयास करते हैं, तो आप केवल एक अलग राज्य में होंगे।

जाहिर है, यह सूचक अद्यतन हो जाता है जब आप git push या git push origin master करते हैं, लेकिन स्पष्ट रूप से एक यूआरएल के लिए जोर दे रहा है कि सूचक है, और इसलिए स्थिति अद्यतन नहीं होता।

यदि आप यूआरएल को धक्का देने के बाद git fetch या git pull करते हैं, तो स्थिति संदेश भी उस मामले में गायब हो जाएगा।

नोट: यदि आपके पास एकाधिक रिमोट हैं, और आप अपनी शाखा को किसी अन्य दूरस्थ शाखा को ट्रैक करने के लिए सेट करते हैं, जैसे कि upstream master, इस स्थिति में आपका स्टेटस संदेश होगा, उदाहरण के लिए, Your branch is ahead of 'upstream/master' by 1 commit। तो इसकी एकमात्र ट्रैक वाली दूरस्थ शाखा है जो तुलना की जाती है। यह देखने के लिए git config देखें कि आपकी वर्तमान शाखा किस दूरस्थ शाखा को ट्रैक कर रही है।

0

ध्यान दें कि, के बाद से git1.8.1rc1 (दिसंबर 2012), Git will include hint messages:

if (advice_status_hints) 
+  strbuf_addf(sb, 
+  _(" (use \"git push\" to publish your local commits)\n")); 

जब "git checkout" एक शाखा द्वारा चेक आउट करने, यह उपयोगकर्ता बताता है कि कैसे बहुत पीछे (या आगे) नई शाखा है रिमोट ट्रैकिंग शाखा के सापेक्ष यह बनाता है।
संदेश अब भी सलाह देता है कि उन्हें धक्का या खींचकर उन्हें कैसे सिंक करें।

इसे advice.statusHints कॉन्फ़िगरेशन चर के साथ अक्षम किया जा सकता है।

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