2010-05-29 21 views
78

मैं जिथब पर एक गिट रिपॉजिटरी अपडेट करने की कोशिश कर रहा हूं। मैंने परिवर्तनों का एक गुच्छा बनाया, उन्हें जोड़ा, फिर गिट पुश करने का प्रयास किया। प्रतिक्रिया मुझे बताती है कि सब कुछ अद्यतित है, लेकिन स्पष्ट रूप से यह नहीं है।गिट पुश कुछ भी नहीं करेगा (सब कुछ अद्यतित)

git remote show origin 

मुझे अपेक्षित भंडार के साथ प्रतिक्रिया देता है।

मुझे बता रहा है कि गिट मुझे रिपोजिटरी क्यों बता रहा है जब स्थानीय आवाज़ें भंडार पर दिखाई नहीं दे रही हैं?

[searchgraph] git status 
# On branch develop 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  Capfile 
#  config/deploy.rb 
nothing added to commit but untracked files present (use "git add" to track) 

    [searchgraph] git add . 

    [searchgraph] git status 
# On branch develop 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: Capfile 
#  new file: config/deploy.rb 
# 

    [searchgraph] git commit -m "Added Capistrano deployment" 
[develop 12e8af7] Added Capistrano deployment 
2 files changed, 26 insertions(+), 0 deletions(-) 
create mode 100644 Capfile 
create mode 100644 config/deploy.rb 

    [searchgraph] git push 
Everything up-to-date 

    [searchgraph] git status 
# On branch develop 
nothing to commit (working directory clean) 

उत्तर

121

git push आपकी सभी स्थानीय शाखाओं को धक्का नहीं देता है: यह कैसे पता चलेगा कि कौन सी रिमोट शाखाएं उन्हें धक्का दे रही हैं? यह केवल स्थानीय शाखाओं को धक्का देता है जिन्हें एक विशेष रिमोट शाखा में धक्का देने के लिए कॉन्फ़िगर किया गया है।

Git (1.6.5.3) के अपने संस्करण पर, जब मैं git remote show origin चलाने यह वास्तव में बाहर प्रिंट जो शाखाओं धक्का के लिए कॉन्फ़िगर किया गया है: सब के बारे में चिंता किए बिना

Local refs configured for 'git push': 
    master pushes to master (up to date) 
    quux pushes to quux (fast forwardable) 

प्र लेकिन मैं master करने के लिए धक्का सकता है इस!

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

हालांकि, आपके द्वारा पोस्ट किए गए आउटपुट स्निपेट से, आप develop नामक शाखा पर हैं, जिसे मैं अनुमान लगा रहा हूं कि किसी भी चीज़ को धक्का देने के लिए सेट नहीं किया गया है। तो बिना तर्क के git push उस शाखा पर काम नहीं करेगा।

जब यह "सबकुछ अद्यतित" कहता है, तो इसका मतलब है "सभी शाखाएं जिन्हें आपने मुझे बताया है कि कैसे धक्का देना है"।

प्रश्न। तो मैं अपनी प्रतिबद्धताओं को कैसे धक्का दे सकता हूं?

हैं कि आप क्या करना origin/master में develop से अपने परिवर्तनों को डाल दिया जाता है चाहता हूँ, तो आप शायद उन्हें में विलय करना चाहिए अपने स्थानीय master तो वह धक्का:

git checkout master 
git merge develop 
git push    # will push 'master' 

क्या आप चाहते हैं एक develop बनाने के लिए है, तो रिमोट पर शाखा, master से अलग है, तो git push को तर्क की आपूर्ति:

git push origin develop 

यही होगा: एक नई शाखा का सृजन रिमोट पर develop कहा जाता है; और उस शाखा को अपने स्थानीय develop शाखा के साथ अद्यतित करें; और होगा धक्का develop स्वचालित रूप से तर्क के बिना तो origin/develop कि भविष्य में, git push को पुश करने के लिए सेट develop

आप पुश करने के लिए चाहते हैं, तो अपने स्थानीय develop को एक दूरस्थ शाखा कुछ अन्य बुलायाdevelop से है, तो आप कह सकते हैं:

git push origin develop:something-else 

हालांकि, उस रूप हमेशा के लिए develop सेट अप नहीं होगा भविष्य में origin/something-else पर धक्का दें; यह एक शॉट शॉट ऑपरेशन है।

+2

विस्तार के लिए धन्यवाद। मैं गलत शाखा = _ = –

+0

पर बहुत धन्यवाद, धन्यवाद, आपका गिट पुश मूल विकसित होता है: कुछ और ने सवाल का जवाब दिया है कि मैं थोड़ी देर तक नहीं पहुंच पाया। – antroid

+0

मेरे मामले में 'गिट पुश मूल x' अभी भी भविष्य में धक्का देने के लिए शाखा x स्थापित नहीं कर रहा था। यह'gitconfig' '[रिमोट "मूल"]' खंड में एक विशिष्ट pushspec के कारण था जो गिट के व्यवहार का कारण बन रहा था। – Raman

12

प्रयास करें:

git push --all origin 
+0

यह एक शाखा से मास्टर में नहीं, रिपो पर शाखाओं को अलग करने के लिए प्रतिबद्ध करता है। –

1

इसके अलावा अपने सही शाखा को आगे बढ़ाने के लिए सुनिश्चित करें।

4

अभी, ऐसा लगता है कि आप विकास शाखा पर हैं। क्या आपके पास उत्पत्ति पर एक शाखा है? यदि नहीं, तो git push origin develop आज़माएं। git push आपके मूल पर एक विकास शाखा के बारे में जानता है एक बार काम करेगा।

आगे पढ़ने के रूप में, मैं git-push man pages, विशेष रूप से, उदाहरण अनुभाग पर एक नज़र डालेगा।

+0

आप सही हैं। धन्यवाद। –

0

सैम स्टोक्स के लिए धन्यवाद। उनके जवाब के अनुसार आप समस्या को विभिन्न तरीकों से हल कर सकते हैं (मैंने इस तरह से उपयोग किया)। अपने को विकसित निर्देशिका अद्यतन करने के बाद आप reinitialize यह

git init 

तो फिर तुम प्रतिबद्ध और

17

गुरु यह जब मेरे Sourcetree एप्लिकेशन के मंचन के दौरान दुर्घटनाग्रस्त हो गया मुझे क्या हुआ अद्यतन धक्का कर सकते हैं चाहिए। और कमांड लाइन पर, ऐसा लगता है कि पिछले git add दूषित हो गया था। यदि यह मामला है, कोशिश:

git init 
git add -A 
git commit -m 'Fix bad repo' 
git push 

या पिछले आदेश, आप शाखा स्थापित करने की आवश्यकता हो सकती है।

git push --all origin master 

ध्यान रखें कि यदि आप कोई शाखा या कोई भी प्रकार नहीं किया है तो यह पर्याप्त है। उस स्थिति में, सुनिश्चित करें कि आप सही शाखा में git push origin develop

1

यह मेरे साथ हुआ जब मैं ^C गीथब के लिए एक गिट पुश के बीच में हुआ। गिथूब ने यह नहीं दिखाया कि परिवर्तन किए गए थे। ठीक करने के लिए, मैंने अपने काम करने वाले पेड़ में बदलाव किया, प्रतिबद्ध किया, और फिर धक्का दिया। यह पूरी तरह से ठीक काम किया।

0

इसके बजाय, आप इस की कोशिश कर सकते हैं, तो आप मास्टर के लिए जाने की जरूरत नहीं है, आप सीधे अपने शाखा ही

जैसा कि ऊपर बताया गया है, जब आप एक रिबेस करते हैं, आप बदल रहे हैं से परिवर्तन धक्का मजबूर कर सकते हैं आपकी शाखा पर इतिहास नतीजतन, अगर आप एक रिबेस के बाद एक सामान्य git push करने की कोशिश, Git यह अस्वीकार कर देंगे क्योंकि एक सीधा रास्ता अपनी शाखा पर प्रतिबद्ध करने के लिए सर्वर पर से प्रतिबद्ध नहीं है वहाँ। इसके बजाय, आप -f या --force झंडा उपयोग करने के लिए Git बताने के लिए कि हाँ, तुम सच में पता है कि तुम क्या कर रहे हैं की आवश्यकता होगी।जब बल धक्का देता है, तो यह अत्यधिक अनुशंसा की जाती है कि आप अपने push.default कॉन्फ़िगरेशन सेटिंग को सरल पर सेट करें, जो कि गिट 2.0 में डिफ़ॉल्ट है। सुनिश्चित करें कि आपके config सही है बनाने के लिए, चलाएँ:

$ git config --global push.default simple 

एक बार यह सही है, तो आप सिर्फ चला सकते हैं:

$ git push -f 

और अपने पुल अनुरोध की जाँच करें। इसे अद्यतन किया जाना चाहिए!

अधिक जानकारी के लिए इस LINK के नीचे जाएं।

4

पिछले प्रतिबद्ध करने के लिए जाने का प्रयास करें और फिर git push origin HEAD:master

+0

यह वास्तव में काम किया। क्या आप समझाएंगे * क्यों * यह काम करता है? –

+0

दस्तावेज़ों से टेक्स्ट: 'मौजूदा शाखा को मूल भंडार में रिमोट रेफ मिलान करने वाले मास्टर पर पुश करें। यह फॉर्म वर्तमान शाखा को अपने स्थानीय नाम के बारे में सोचने के बिना धक्का देना सुविधाजनक है – uruapanmexicansong

1

मेरे मामले के लिए, अन्य समाधान से कोई भी काम करें। मुझे नई संशोधित फ़ाइलों का बैकअप करना था (git status के साथ दिखाया गया), और git reset --hard चलाएं। इसने मुझे रिमोट सर्वर के साथ रीयलइन करने की अनुमति दी। नई संशोधित फाइलें जोड़ना, और

git add . 
git commit -am "my comment" 
git push 

चाल चल रही थी। मुझे उम्मीद है कि यह किसी को "आखिरी मौका" समाधान के रूप में मदद करता है।

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