2015-11-06 7 views
6

रद्द करें मुझे git rebase -i HEAD~5 पसंद है जो मेरी प्रतिबद्धता को स्क्वैश करने के लिए है। कभी-कभी मुझे लगता है कि मुझे 5 काम करने की जरूरत है लेकिन फिर मुझे एहसास हुआ कि मुझे 7 की जरूरत है। हालांकि गिट ने विम में रीबेस संपादक .git/rebase-merge/git-rebase-todo लाया है।गिट: एक इंटरैक्टिव रीबेस

अगर मैं छोड़ने कि बफर (vim) तो Git का कहना है:

Successfully rebased and updated refs/heads/my-branchname 

वहाँ संपादक में/डब्ल्यू से रिबेस को रोकने के लिए कोई तरीका है? मुझे लगता है कि मैं git rebase --abort किसी अन्य खोल से कर सकता हूं लेकिन यह सुनिश्चित नहीं करता कि git-rebase-todo फ़ाइल में क्या होगा जो मैं किसी अन्य बफर में संपादन के बीच में होगा।

+1

तुम नहीं तो भले ही शाखा थी "फाइल के अंदर कुछ भी बदल दिया है सफलतापूर्वक छूट दी गई "सभी काम समान हैं इसलिए यह प्रभावी ढंग से नो-ऑप है। –

उत्तर

10

आप प्रारंभिक इंटरैक्टिव रिबेस संपादक विंडो कि इस तरह दिखता है में रहते हैं:

pick f7f3f6d changed my name a bit 
pick 310154e updated README formatting and added blame 
pick a5f4a0d added cat-file 

# Rebase 710f0f8..a5f4a0d onto 710f0f8 
... 
... 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 

आप संपादक विंडो की संपूर्ण सामग्री को हटाने और यह बचत, या करने के लिए संपादक के कारण द्वारा रिबेस गर्भपात कर सकते हैं एक त्रुटि कोड के साथ बंद करें।

vim में इस d SHIFT+g:wq द्वारा पीछा के साथ पूरा किया जा सकता है, या वैकल्पिक रूप से के रूप में माइक एच आर :cq का उपयोग कर बाहर बताया एक त्रुटि के साथ बाहर निकलने के लिए संपादक के कारण।

यदि आप पहले से ही उस विंडो को छोड़ चुके हैं और निम्न स्क्वैश/संपादन/आदि के माध्यम से आगे बढ़ रहे हैं, तो इससे पूरे रिबेस को निरस्त नहीं किया जाएगा, लेकिन वर्तमान में संपादित किए जा रहे प्रतिबद्धता में केवल बदलाव ही होंगे। इस बिंदु पर आप उपरोक्त के रूप में संपादक को मार सकते हैं, लेकिन इसके अतिरिक्त आपको कमांड लाइन पर git rebase --abort भी करना होगा।

+0

यह सही नहीं है। यदि आप पूरे रिबेस ऑपरेशन को निरस्त करना चाहते हैं, लेकिन आप इंटरैक्टिव रीबेजिंग की श्रृंखला के आखिरी स्क्वैश में हैं, तो यह इंटरैक्टिव रिबेस को "निरस्त" नहीं करता है। यह केवल वर्तमान रीबेस चरण प्रतिबद्धता को रोकता है। – fourpastmidnight

+0

@fourpastmidnight मुझे पूरा यकीन नहीं है कि मैं अनुसरण करता हूं। हटाना और सहेजना केवल प्रारंभिक संपादक विंडो पर लागू होता है जहां आप चुनना/स्क्वैश/संपादित/आदि चुनना चुनते हैं। यदि आप पहले ही इसे छोड़ चुके हैं और एक व्यक्तिगत स्क्वैश रिज़ॉल्यूशन के लिए संपादक में हैं तो यह लागू नहीं होता है। क्या आप इस मामले के बारे में बात कर रहे हैं? – whaleberg

+0

हां, यह बिल्कुल सही है। मैं ओपी के प्रश्न को _entire_ rebase प्रक्रिया को निरस्त करने के बारे में समझ गया, लेकिन उदाहरण के लिए ओपी संपादक विंडो में स्क्वैश के लिए था, उदाहरण के लिए। मैंने कल खुद को इसी तरह की स्थिति में पाया और आपके उत्तर में जो सुझाव दिया वह कोशिश की। दुर्भाग्यवश, यह आपके द्वारा अभी तक आपकी टिप्पणी में वर्णित तरीके से व्यवहार करता है। शायद आपके उत्तर को स्पष्ट करने से दूसरों को मेरी गलती से बचने में मदद मिलेगी (मैं इंटरैक्टिव रिबेस के लिए थोड़ा नया हूं)। किसी भी घटना में, मैं फिर से rebase और प्रतिबद्धता को संपादित/विभाजित करने में सक्षम था, लेकिन व्यवहार अप्रत्याशित था। – fourpastmidnight

6

:cq टाइप करके रीबेस को रद्द करने के लिए आप गैर-शून्य निकास कोड के साथ विम निकास कर सकते हैं। इस का परिणाम है:

$ git rebase -i HEAD~4 
# enter vim, then type :cq<enter> 
Could not execute editor 

vim मदद पृष्ठ हम देखते हैं कि सीक्यू cquit के लिए कम है से:

             *:cq* *:cquit* 
:cq[uit][!]    Quit Vim with an error code, so that the compiler 
         will not compile the same file again. 
         WARNING: All changes in files are lost! Also when the 
         [!] is not used. It works like ":qall!" |:qall|, 
         except that Vim returns a non-zero exit code. 
+0

ठीक है, मैं काट दूंगा; 'cq' क्या है? – Meltemi

+0

@Meltemi मैंने 'cq' के स्पष्टीकरण के साथ अपना उत्तर अपडेट किया। –

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