2010-10-19 9 views
9

मैं वर्तमान में एक परियोजना पर काम कर रहा हूं और इसे करने के लिए दो अलग-अलग स्थानों में मशीनों का उपयोग कर रहा हूं। मैंने उस सुविधा के लिए एक शाखा बनाई है जिस पर मैं काम कर रहा हूं और जब मैं उस पर कुछ काम पूरा करता हूं तो मैं उस शाखा में अपनी प्रतिबद्धता में संशोधन करता हूं और इसे सर्वर पर धक्का देता हूं ताकि मैं अपनी दूसरी मशीन पर जहां से छोड़ा हो वहां उठा सकूं।गिट: संशोधित दबाव

जब मैं अपनी संशोधित प्रतिबद्धता भेजने की कोशिश करता हूं तो यह मेरे धक्का को अस्वीकार कर देता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं एक प्रतिबद्धता को दबा रहा हूं जिसका उद्देश्य फीचर शाखा के वर्तमान सिर को पकड़ना है। मैं आमतौर पर बस - बल का उपयोग करता हूं।

क्या ऐसा करने का कोई बेहतर तरीका है?

[email protected]:~/projects/myproject$ git pull origin topx 
From heroku.com:myproject 
* branch   topx  -> FETCH_HEAD 
Already up-to-date. 
[email protected]:~/projects/myproject$ git add app/models/reward.rb 
[email protected]:~/projects/myproject$ git commit --amend 
[topx 82a9880] Added topX reward 
9 files changed, 106 insertions(+), 21 deletions(-) 
rewrite app/views/ceo/_reward_criteria.html.erb (96%) 
create mode 100644 public/javascripts/jquery.multiselect.min.js 
create mode 100644 public/site/javascripts/jquery.multiselect.min.js 
create mode 100644 public/stylesheets/jquery.multiselect.css 
[email protected]:~/projects/myproject$ git push origin topx 
To [email protected]:myproject.git 
! [rejected]  topx -> topx (non-fast-forward) 
error: failed to push some refs to '[email protected]:myproject.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

उत्तर

17

इस मामले में बिना किसी बल के रिमोट शाखा को ओवरराइट करने का कोई तरीका नहीं है।

  • उपयोग करने के लिए git push --force
  • --amend का उपयोग नहीं करते जारी रखने के लिए: आप 2 विकल्प हैं। यदि आपके द्वारा किए गए कुछ कामों में एक अलग प्रतिबद्धता है (पर्याप्त स्थिर है, संकलित करना, अधिक परीक्षण पास करना आदि ...), नई प्रतिबद्धता बनाएं। यदि नहीं, तो अस्थायी शाखा बनाएं (my-feature-unstable जैसे कुछ यदि आपकी शाखा my-feature है) और वहां प्रतिबद्ध करें। जब यह फिर से स्थिर हो जाता है, तो आप कई अधूरा कामों से अपनी शाखा में एकल प्रतिबद्धता बनाने के लिए git reset --soft my-feature, checkout my-feature और commit कर सकते हैं। उसके बाद, अस्थायी शाखा हटा दी जा सकती है।
+6

मैं "संशोधन का उपयोग न करें" विकल्प अर्हता प्राप्त करूंगा: प्रकाशित काम पर इसका उपयोग न करें। अप्रकाशित काम (स्थानीय/व्यक्तिगत शाखाओं) पर आपको बिल्कुल इसका उपयोग करना चाहिए। (और यदि आपके पास एक से अधिक व्यक्तिगत रेपो हैं, तो इसका मतलब यह है कि आप कभी-कभी अपने काम को स्थानांतरित करने के लिए 'push -force' का उपयोग करेंगे। यह ठीक है।) – Cascabel

+0

इसके लिए बहुत बहुत धन्यवाद! अब मैं अपना कोड सुरक्षित रख सकता हूं और प्रतिबद्ध लॉग साफ़ कर सकता हूं। –

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