2012-01-20 11 views
7

में धक्का दें, मैं अपनी विशेषता पर काम करने की कोशिश कर रहा हूं, जबकि इसे शाखा शाखा के साथ अद्यतित रखते हुए।गिट रीबेस मास्टर, फिर मूल शाखा परिणामों को गैर-फास्ट-फॉरवर्ड त्रुटि

परिदृश्य

git clone ssh://xxx/repo 

git checkout -b featureA 

$ git add file.txt 

$ git commit -m 'adding file' 

$ git push origin featureA 

इस बीच एक जोड़ी नई प्रतिबद्ध जहां मूल मास्टर

git checkout master 

git pull origin master 

git checkout featureA 

git rebase master 

git push origin feature A 
To ssh://xxx/repo 
! [rejected]  featureA -> featureA (non-fast-forward) 
error: failed to push some refs to 'ssh://xxx/repo' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

मैं सर्वर इसे स्वीकार करने के लिए मजबूर कर के बिना कैसे rebase कर सकते हैं करने के लिए धक्का दिया है?

+0

आप रीबेस नहीं कर सकते ... इतिहास बदलता है और आपको पुश – knittl

उत्तर

9

आप पुन: प्रयास करने के बाद धक्का नहीं दे सकते। अब उनके पास अलग-अलग SHA1 हैं क्योंकि उनका इतिहास अलग है। यदि अद्यतन रेफरी में इसके पूर्वजों में पुराना रेफरी नहीं है, तो यह संभावित रूप से हानिकारक ऑपरेशन है और गिट इसे अनुमति नहीं देगा।

यदि आप मजबूर नहीं करना चाहते हैं तो आपका एकमात्र विकल्प विलय करना है।

अगर आप अकेले काम कर रहे हैं और दूसरों को इस शाखा में आने की आवश्यकता नहीं है तो मजबूर करना इतना बुरा नहीं है।

+0

Thx @Adam को मजबूर करना होगा! तो मेरे मामले में, क्या मैं अपनी सुविधा रखने के लिए मास्टर के साथ विलय करना जारी रखता हूं मास्टर के साथ अद्यतित, फिर मेरे रिमोट फीचर में बदलावों को दबाएं एक शाखा को हमारे सर्वर पर सुरक्षित रखने के लिए? तो जब मैं भविष्य में किसी बिंदु पर फीचर ए को मास्टर में मर्ज करने के लिए तैयार हूं, तो मैं मास्टर पर स्विच करता हूं और गिट मर्ज फीचर ए करता हूं? – ben39

+0

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

+0

ठीक है। क्या यह सही नहीं है कि, मेरे दिन के लिए देव, जब मैं फीचर में मास्टर विलय करूँगा, 'गिट चेकआउट फीचर ए && गिट मर्ज मास्टर एंड गिट पुश मूल फीचर ए' का पालन करने के लिए मास्टर के साथ बने रहने के लिए, मैं डुप्लिकेट काम करता हूं मास्टर पहले से ही है। यह डुप्लिकेट समस्या विशेष रूप से सतह पर होगी जब एक दिन मैं फीचर ए के साथ मास्टर को मर्ज करता हूं जैसे कि 'गिट चेकआउट मास्टर और गिट मर्ज फीचर ए' का पालन करें? – ben39

5

आपके प्रश्न का संक्षिप्त उत्तर: आप फीचर ए के खिलाफ मास्टर को रीबर्स करके रिवर्स कर सकते हैं (लेकिन अभी तक धक्का न दें), और उस बिंदु पर फीचर ए रीसेट करें।

यह वास्तव में चेरी को फीचर ए पर मास्टर से काम करने का विकल्प है, नकारात्मक बात यह है कि आप दो शाखाओं पर डुप्लिकेट काम करेंगे। यह आपकी तत्काल समस्या को हल करेगा (यदि यह आपका इरादा है) लेकिन लंबे समय तक आपको उन रिमोट शाखाओं को वापस नहीं किया जाना चाहिए जिन्हें पहले से ही रिमोट शाखा में धकेल दिया गया है। आपके परिदृश्य में सबसे अच्छा समाधान वास्तव में विलय करना है।