पूरी तरह से एक रिबास रद्द करें


255

मैंने इस तरह से एक रिबेस किया:

git rebase --onto master new_background_processing export_background_processing

मैंने जो चाहा, वह नहीं किया, इसलिए मैंने एक रीसेट किया:

git reset --hard HEAD@{1}

मुझे अपनी शाखा वापस उस स्थिति में मिल गई जो वह थी, लेकिन मुझे यह संदेश तब मिला जब मैंने git स्टेटस टाइप किया:

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

मैं उस छूट को पूरी तरह से कैसे रद्द करूं? निश्चित नहीं है कि प्रति से मतलब क्या है।


16
git rebase --abort
Micha Wiedenmann

6
Git 2.12 अब प्रदान करता है git rebase --quit। देखें नीचे मेरा उत्तर
VonC

जवाबों:


407

का उपयोग करें git rebase --abort। इसके लिए आधिकारिक लिनक्स कर्नेल प्रलेखन सेgit rebase :

git rebase --continue | --skip | --abort | --edit-todo

5
मेरे मामले में git rebase --abortकाम नहीं किया, क्योंकि मैंने कुछ गड़बड़ कर दी। मैं केवल निम्न त्रुटि मिल गया: error: could not read '.git/rebase-apply/head-name': directory of file does not existgit rebase --quit वर्णित bellow मेरी समस्या हल।
कूट

84

पिछले रिबेट के मामले में जिसे आपने ठीक से निरस्त नहीं किया था, अब आपके पास (Git 2.12, Q1 2017) है git rebase --quit

Nguy Thn Thái pcloudsNg Dc Duy ( ) द्वारा 9595177 (12 नवंबर 2016) देखें । (द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 06cd5a1 , 19 दिसंबर 2016)

rebase: --quitसफाई रिबूट में जोड़ें , बाकी सब कुछ अछूता छोड़ दें

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

rm -r .git/<some rebase dir>

और अपने जीवन के साथ जारी रखें।
लेकिन इसके लिए दो अलग-अलग निर्देशिकाएं हो सकती हैं <some rebase dir>(और यह स्पष्ट रूप से कुछ ज्ञान की आवश्यकता है कि रिबास कैसे काम करता है), और " .git" भाग ज्यादा लंबा हो सकता है यदि आप शीर्ष-डीआईआर या एक जुड़े कार्यस्थल पर नहीं हैं। और " rm -r" करना बहुत खतरनाक है .git, इसमें गलती से ऑब्जेक्ट डेटाबेस या अन्य महत्वपूर्ण डेटा नष्ट हो सकता है।

git rebase --quitइस उपयोग के मामले के लिए " " प्रदान करें , एक मिसाल है जो " git cherry-pick --quit" है।


Git 2.27 (Q2 2020) से पहले, git merge --autostashप्रारंभिक गंदे अवस्था को बनाए रखने के लिए " " द्वारा बनाई गई स्टैश एंट्री को गलती से " git rebase --quit" छोड़ दिया गया था , जिसे सही कर दिया गया है।

डेंटन लियू ( ) द्वारा 9b2df3e (28 अप्रैल 2020) के लिए प्रतिबद्ध देखें । ( जूनियो सी हमानो द्वारा विलय - - 3afdeef में प्रतिबद्ध , 29 अप्रैल 2020)Denton-L
gitster

rebase: में autostash प्रविष्टि सहेजने stash reflogपर--quit

साइन-ऑफ-बाय: डेंटन लियू

में a03b55530a ( " merge: सिखाने --autostash विकल्प", 2020/4/7, Git v2.27.0 - मर्ज में सूचीबद्ध बैच # 5 ), --autostashविकल्प के लिए पेश किया गया था git merge

(देखें " कैन" git pull"स्वतः स्लैश और पॉप लंबित परिवर्तन? ")

विशेष रूप से, जब git merge --quitएक ऑटोस्टैश प्रविष्टि के साथ चलाया जाता है , तो इसे स्टैश रिफ्लॉग में बचाया जाता है।

यह वर्तमान व्यवहार के साथ विपरीत है git rebase --quitजहां ऑटोस्टैश प्रविष्टि केवल अस्तित्व से बाहर कर दिया जाता है।

के व्यवहार को अपनाने git merge --quitमें git rebase --quitऔर इसके बजाय सिर्फ इसे हटाने के गुप्त कोष reflog में autostash प्रविष्टि सहेजने।


3
यह काम निर्देशिका को रीसेट करने के साइड-इफ़ेक्ट से बचने के लिए बहुत उपयोगी है जब उनमें बदलाव किया जाता है git rebase, तो उन्हें खोने के बजाय जैसे मैंने किया था: पी।
वॉरिएंट चिम्पांजी

12

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


8

यदि आप "रिबासिंग" कर रहे हैं , तो "पहले से ही रिबास शुरू हो गया है" जिसे आप रद्द करना चाहते हैं , बस (#)रिबेट संपादक में सूचीबद्ध सभी कमेंट्स पर टिप्पणी करें ।

परिणामस्वरूप आपको कमांड लाइन संदेश मिलेगा

Nothing to do
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.